You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调用包含OBJECT类型输出参数的Oracle存储过程?

1. 自定义OBJECT类型能否作为存储过程输出参数

Oracle完全支持将自定义OBJECT类型作为存储过程的IN/OUT/IN OUT参数,你现有存储过程的参数定义完全合法,不存在语法错误。

2. 正确获取OBJECT类型输出结果的方法

分两种常用使用场景:

场景1:在SQL*Plus、Oracle SQL Developer等客户端直接测试(你当前使用的绑定变量测试方式)

你现有的测试脚本逻辑已经正确,仅需要注意autoprint对自定义OBJECT类型的自动打印支持不统一,执行完存储过程调用后,你可以通过以下两种方式获取结果:

  • 直接查询绑定变量的OBJECT属性:
-- 以你示例中的PRE_RESUMEN_TYP类型变量cursortemp12为例,执行完存储过程后执行以下查询即可拿到对应字段值
SELECT 
  :cursortemp12.COL1,
  :cursortemp12.COL2,
  :cursortemp12.COL3,
  :cursortemp12.COL14
FROM DUAL;
  • 用PRINT命令直接打印整个OBJECT(多数Oracle客户端均支持):
PRINT cursortemp12;

注意:如果你的存储过程没有封装在PKG包下,调用时去掉前缀PKG.,直接写存储过程名即可。

场景2:在PL/SQL代码块中调用获取结果

如果是在业务逻辑、PL/SQL脚本中调用,可以直接声明对应OBJECT类型的变量接收输出,再直接访问属性使用:

DECLARE
    -- 声明和输出参数类型匹配的变量
    v_tramite PRE_TRAMITE_TYP;
    v_canal PRE_CANAL_TYP;
    v_resumen PRE_RESUMEN_TYP;
    -- 剩余输出参数按同样规则声明即可
BEGIN
    -- 调用存储过程
    CONSULTAR_PR(
        piinRegion => 123,
        pistIdTramite => null,
        pistFolio => null,
        pistFzaVta => 'qwer',
        pistTipoTramite => 'asdf',
        pistCurp => 'xxxxx',
        potyTramite => v_tramite,
        potyCanal => v_canal,
        potyResumen => v_resumen
        -- 剩余参数按顺序补全即可
    );
    
    -- 直接访问OBJECT属性使用
    DBMS_OUTPUT.PUT_LINE('RESUMEN类型COL1字段值:' || v_resumen.COL1);
    DBMS_OUTPUT.PUT_LINE('RESUMEN类型COL2字段值:' || v_resumen.COL2);
END;
/

内容的提问来源于stack exchange,提问作者Cristian Piste

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:39:01