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

PL/SQL调用含OUT参数的包函数get_sip_movement报错求助

问题分析与解决

错误根源

第一个错误(ORA-06572)

SQL语句(如SELECT)无法调用带有OUT参数的PL/SQL函数。SQL引擎仅支持处理纯IN参数的函数,无法识别和处理OUT参数的输出逻辑,直接在SELECT中调用get_sip_movement必然触发该错误。

第二个错误(ORA-00904 + PLS-00306)

  • PLS-00306是因为你只传入了1个参数,但函数要求4个参数(1个IN + 3个OUT),参数数量完全不匹配。
  • ORA-00904本质还是调用方式错误——SQL引擎无法识别带OUT参数的函数,并非包或函数不存在。

正确实现方式

带OUT参数的PL/SQL函数必须在PL/SQL上下文中直接调用,不能嵌入到SQL语句里。正确写法如下:

CREATE OR REPLACE FUNCTION EMP_REFCURSOR_F
  RETURN SYS_REFCURSOR
AS
  L_EMP_REF_CURSOR   SYS_REFCURSOR;
  po_plan_name       plans.plan_name%type; -- 用原表%type避免类型/长度不匹配
  po_client_comp_name companies.comp_name%type;
  po_comp_code       companies.comp_code%type;
BEGIN
  -- 在PL/SQL中直接调用函数,传入所有参数(含OUT参数)
  L_EMP_REF_CURSOR := rr400_generate_sip_movement.get_sip_movement(
    pi_report_instance_id => 137610,
    po_plan_name          => po_plan_name,
    po_client_comp_name   => po_client_comp_name,
    po_comp_code          => po_comp_code
  );
  
  -- 若需使用OUT参数的值,可在此添加逻辑(如打印、存储)
  DBMS_OUTPUT.PUT_LINE('计划名称: ' || po_plan_name);
  
  RETURN L_EMP_REF_CURSOR;
END;
/

核心注意事项

  • 带OUT/IN OUT参数的PL/SQL函数,只能在PL/SQL块(函数、过程、匿名块)中直接调用,不能嵌入SQL语句执行。
  • 定义OUT参数变量时,优先使用原表的%type类型,避免手动指定长度导致类型不匹配。
  • 调用时建议使用命名参数(=>),提高代码可读性,避免参数顺序错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:23:03