【问题标题】:call procedure with table datatype as a Input parameter以表数据类型作为输入参数的调用过程
【发布时间】:2021-05-24 05:00:16
【问题描述】:

我想在plsql developer中调用这个过程。

procedure issue( ErrorCode out number,
                  ErrorText out varchar2,
                  No out number,
                  Date out date,
                  BCode in number,
                  BrCode in number,
                  ACode in varchar2,
                  TCode in number,
                  pi_docElement_InputData IN DocElement_InputData);

最后一个输入参数是这样的:

CREATE OR REPLACE TYPE "DOCELEMENT_INPUTDATA" as Table Of Prepaid_Element_Doc

Prepaid_Element_Doc 是:

CREATE OR REPLACE TYPE "PREPAID_ELEMENT_DOC" as object(
            A NUMBER(4),
            B NUMBER(3),
            C number(4)
  )

我需要输入 2 'PREPAID_ELEMENT_DOC' 作为程序的输入,但我不知道该怎么做。

select issue(801,802,'A',1,???) from dual;

【问题讨论】:

  • 您不能调用select 列表中的过程。为此,您需要一个函数。

标签: oracle procedure plsqldeveloper


【解决方案1】:

只需调用这两种数据库类型的构造函数,例如

DocElement_InputData(PREPAID_ELEMENT_DOC(1,2,3),PREPAID_ELEMENT_DOC(4,5,6))

上面的代码创建了一个DocElement_InputData,其中包含两个PREPAID_ELEMENT_DOC

请参阅您的 Oracle 版本的 Oracle 文档。

这适用于 Oracle 19c

https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Type-Constructor-Expressions.html#GUID-E8A491DE-18BA-4A1E-8CE2-BBA43E5C52D6

【讨论】:

    【解决方案2】:

    您可以通过这种方式调用具有表数据类型的过程

    select 
        issue
        (
            801,
            802,
            'A',
            1, 
            (DOCELEMENT_INPUTDATA
                (
                    PREPAID_ELEMENT_DOC(1, 2, 3), 
                    PREPAID_ELEMENT_DOC(3, 4, 5)
                )
            )
        ) 
    from 
        dual;
    

    【讨论】:

      猜你喜欢
      • 2019-06-19
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 2021-10-28
      • 2012-07-22
      • 1970-01-01
      相关资源
      最近更新 更多