使用表数据类型作为输入参数调用过程

问题描述

我想在 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;

解决方法

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

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

上面的代码创建了一个包含两个 DocElement_InputDataPREPAID_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

,

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

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