测试带REF CURSOR返回值与OUT参数的PL/SQL包函数报错求助
问题分析与解决
你的测试语句存在两个关键错误:
- 参数传递语法错误:
p_name = 'abc'应该使用PL/SQL的命名参数传递符号=>,而非等号。 - 变量类型不匹配且逻辑混乱:
p_out是VARCHAR2类型的OUT参数,但你把REF CURSOR类型的:x传给它,类型完全不兼容;同时你试图把函数返回的REF CURSOR赋值给:x,又把:x作为OUT参数传入,违背参数类型定义。
正确测试步骤
- 声明两个绑定变量:一个接收函数返回的REF CURSOR,另一个接收
p_out的字符串值。 - 使用正确的命名参数语法调用函数。
- 分别打印两个变量的结果。
具体代码如下:
-- 声明绑定变量,对应返回游标和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
相关产品推荐
相关产品推荐

