如何使用对象作为输出来执行存储过程
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;
/
然后以匹配对象属性的方式输出它们
我有这个存储过程的头文件
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;
/
然后以匹配对象属性的方式输出它们