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

如何执行存储过程及调用包中的存储过程与函数

存储过程执行与包内对象调用方法

一、执行存储过程 P_INSERT_PER_LG

1. 直接在SQL客户端执行

如果存储过程是独立对象(不属于包),可通过PL/SQL块执行并处理输出参数:

DECLARE
  v_err_msg VARCHAR2(2000); -- 定义变量接收输出参数
BEGIN
  P_INSERT_PER_LG(
    IN_DATA => SYSDATE,
    IN_CHECK => 'Y',
    IN_PSE => 'PSE001',
    IN_TP_CHECK => 'TYPE_A',
    IN_STATUS => 1,
    IN_MSG => '测试插入',
    OUT_ERR_MSG => v_err_msg
  );
  DBMS_OUTPUT.PUT_LINE('错误信息: ' || v_err_msg);
END;
/

也可用EXEC简写命令(适合无需打印输出的场景):

EXEC P_INSERT_PER_LG(SYSDATE, 'Y', 'PSE001', 'TYPE_A', 1, '测试插入', :v_err_msg);
-- 注意: :v_err_msg 为绑定变量,需提前在客户端声明

2. 从包中调用存储过程

若该存储过程属于某包(示例包名为PKG_PER_LG),调用时需添加包名前缀:

DECLARE
  v_err_msg VARCHAR2(2000);
BEGIN
  PKG_PER_LG.P_INSERT_PER_LG(
    IN_DATA => TO_DATE('2024-05-20', 'YYYY-MM-DD'),
    IN_CHECK => 'N',
    IN_PSE => 'PSE002',
    IN_TP_CHECK => 'TYPE_B',
    IN_STATUS => 0,
    IN_MSG => '包内调用测试',
    OUT_ERR_MSG => v_err_msg
  );
  IF v_err_msg IS NOT NULL THEN
    DBMS_OUTPUT.PUT_LINE('执行报错: ' || v_err_msg);
  ELSE
    DBMS_OUTPUT.PUT_LINE('执行成功');
  END IF;
END;
/

二、调用函数 F_GT_COD_PTH

该函数返回自定义对象类型C_GT_COD_OBJ,需用同类型变量接收返回值。

1. 独立函数的调用

DECLARE
  v_result C_GT_COD_OBJ; -- 声明与返回值类型匹配的变量
BEGIN
  v_result := F_GT_COD_PTH(IN_CODE => 'COD001');
  -- 假设对象有CODE、PATH属性,按需访问
  DBMS_OUTPUT.PUT_LINE('代码: ' || v_result.CODE || ', 路径: ' || v_result.PATH);
END;
/

2. 从包中调用函数

若函数属于某包(示例包名为PKG_COD_PTH),添加包名前缀即可:

DECLARE
  v_result C_GT_COD_OBJ;
BEGIN
  v_result := PKG_COD_PTH.F_GT_COD_PTH(IN_CODE => 'COD002');
  -- 根据对象实际属性结构打印结果
  DBMS_OUTPUT.PUT_LINE('返回结果: ' || v_result.ATTR1 || ' - ' || v_result.ATTR2);
END;
/

补充说明

  • 调用时推荐使用命名参数(如IN_DATA => SYSDATE),相比位置参数更易读、易维护。
  • 自定义对象C_GT_COD_OBJ需提前创建(如执行CREATE TYPE C_GT_COD_OBJ AS OBJECT(...)),确保当前会话可访问。

内容的提问来源于stack exchange,提问作者Kabilan J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:50:44