如何使用对象作为输出来执行存储过程

How to exec stored procedure execution using objects as output

我有这个存储过程的头文件

    PROCEDURE CONSULTAR_PR(
        piinRegion          IN NUMBER,
        pistIdTramite       IN VARCHAR2,
        pistFolio           IN NUMBER,
        pistFzaVta          IN VARCHAR2,
        pistTipoTramite     IN VARCHAR2,
        pistCurp            IN VARCHAR2,
        potyTramite         OUT PRE_TRAMITE_TYP,
        potyCanal           OUT NOCOPY PRE_CANAL_TYP,
        potyCliente         OUT NOCOPY PRE_CLIENTE_TYP,
        potyContrato        OUT NOCOPY PRE_CONTRATO_TYP,
        potyDomicilios      OUT NOCOPY SYS_REFCURSOR,
        potyEquipo          OUT NOCOPY PRE_EQUIPO_TYP,
        potyFinanciamiento  OUT NOCOPY PRE_FINAN_TYP,
        potyCreditcheck     OUT NOCOPY SYS_REFCURSOR,
        potyFacturacion     OUT NOCOPY PRE_FACTURACION_TYP,
        potySuplementarios  OUT NOCOPY SYS_REFCURSOR,
        potyReferencias     OUT NOCOPY SYS_REFCURSOR,
        potyResumen         OUT NOCOPY PRE_RESUMEN_TYP,
        potyMigracion       OUT NOCOPY PRE_MIGRACION_TYP) IS
        ...

我正在尝试使用此脚本进行测试

set autoprint on;
VAR cursortemp1  PRE_TRAMITE_TYP;
VAR cursortemp2  PRE_CANAL_TYP;
VAR cursortemp3  PRE_CLIENTE_TYP;
VAR cursortemp4  PRE_CONTRATO_TYP;
VAR cursortemp5  REFCURSOR;
VAR cursortemp6  PRE_EQUIPO_TYP;
VAR cursortemp7  PRE_FINAN_TYP;
VAR cursortemp8  REFCURSOR;
VAR cursortemp9  PRE_FACTURACION_TYP;
VAR cursortemp10 REFCURSOR;
VAR cursortemp11 REFCURSOR;
VAR cursortemp12 PRE_RESUMEN_TYP;
VAR cursortemp13 PRE_MIGRACION_TYP;
EXEC PKG.CONSULTAR_PR(123, null, null, 'qwer', 'asdf', 'xxxxx',:cursortemp1,:cursortemp2 ,:cursortemp3,:cursortemp4,:cursortemp5,:cursortemp6,:cursortemp7,:cursortemp8,:cursortemp9,:cursortemp10,:cursortemp11,:cursortemp12,:cursortemp13);

但是,有些输出是如下对象

create TYPE PRE_RESUMEN_TYP AS OBJECT
(
    COL1  VARCHAR2(50 Byte),
    COL2  NUMBER,
    COL3  NUMBER,
    COL4  NUMBER,
    COL5  NUMBER,
    COL6  VARCHAR2(50 Byte),
    COL7  NUMBER,
    COL8  NUMBER,
    COL9  NUMBER,
    COL10 NUMBER,
    COL11 NUMBER,
    COL12 NUMBER,
    COL13 NUMBER,
    COL14 VARCHAR2(40 Byte)
);

我不是 SQL 方面的专家,但我想知道是否可以使用对象作为输出,我已经测试了输出为 varchar、number 或 refcursor 的脚本,但我可以'听不懂

您需要一个匿名块来捕获输出变量,例如

declare
        l_potyTramite          PRE_TRAMITE_TYP;
        l_potyCanal            PRE_CANAL_TYP;
        l_potyCliente          PRE_CLIENTE_TYP;
        l_potyContrato         PRE_CONTRATO_TYP;
        l_potyDomicilios       SYS_REFCURSOR;
        l_potyEquipo           PRE_EQUIPO_TYP;
        l_potyFinanciamiento   PRE_FINAN_TYP;
        l_potyCreditcheck      SYS_REFCURSOR;
        l_potyFacturacion      PRE_FACTURACION_TYP;
        l_potySuplementarios   SYS_REFCURSOR;
        l_potyReferencias      SYS_REFCURSOR;
        l_potyResumen          PRE_RESUMEN_TYP;
        l_potyMigracion        PRE_MIGRACION_TYP;
begin
    CONSULTAR_PR(
        piinRegion          =>123
        pistIdTramite       =>'x'
        pistFolio           =>123
        pistFzaVta          =>'x'
        pistTipoTramite     =>'x'
        pistCurp            =>'x'
        potyTramite         => l_PRE_TRAMITE_TYP;
        potyCanal           => l_PRE_CANAL_TYP;
        potyCliente         => l_PRE_CLIENTE_TYP;
        potyContrato        => l_PRE_CONTRATO_TYP;
        potyDomicilios      => l_SYS_REFCURSOR;
        potyEquipo          => l_PRE_EQUIPO_TYP;
        potyFinanciamiento  => l_PRE_FINAN_TYP;
        potyCreditcheck     => l_SYS_REFCURSOR;
        potyFacturacion     => l_PRE_FACTURACION_TYP;
        potySuplementarios  => l_SYS_REFCURSOR;
        potyReferencias     => l_SYS_REFCURSOR;
        potyResumen         => l_PRE_RESUMEN_TYP;
        potyMigracion       => l_PRE_MIGRACION_TYP;

 dbms_output.put_line(...);
end;
/

然后以匹配对象属性的方式输出它们