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

测试带REF CURSOR返回值与OUT参数的PL/SQL包函数报错求助

问题分析与解决

你的测试语句存在两个关键错误:

  1. 参数传递语法错误:p_name = 'abc' 应该使用PL/SQL的命名参数传递符号 =>,而非等号。
  2. 变量类型不匹配且逻辑混乱:p_out 是 VARCHAR2 类型的OUT参数,但你把REF CURSOR类型的:x传给它,类型完全不兼容;同时你试图把函数返回的REF CURSOR赋值给:x,又把:x作为OUT参数传入,违背参数类型定义。

正确测试步骤

  1. 声明两个绑定变量:一个接收函数返回的REF CURSOR,另一个接收p_out的字符串值。
  2. 使用正确的命名参数语法调用函数。
  3. 分别打印两个变量的结果。

具体代码如下:

-- 声明绑定变量,对应返回游标和OUT参数
var rc_result REFCURSOR;
var out_str VARCHAR2(100);

-- 调用函数,确保参数类型和传递符号正确
exec :rc_result := sum_pkg.sum_detail(p_name => 'abc', p_out => :out_str);

-- 打印游标结果
print rc_result;

-- 打印OUT参数的返回值
print out_str;

另外补充:你的包定义代码缺少is/as关键字,正确的包规范开头应为:

create package sum_pkg is
    TYPE rc is REF CURSOR;

    function sum_detail
    (
        p_name in varchar2,
        p_out  out varchar2
    )
    return rc;
end sum_pkg;
/

包体需要单独实现示例逻辑(供参考):

create package body sum_pkg is
    function sum_detail
    (
        p_name in varchar2,
        p_out  out varchar2
    )
    return rc
    as
        l_rc rc;
    begin
        p_out := '已处理:' || p_name;
        open l_rc for select * from your_table where name = p_name;
        return l_rc;
    end sum_detail;
end sum_pkg;
/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:54:51