关于Oracle游标out参数多层调用的BUG,ORA-06504
数据库版本
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit
测试代码
declare
p_cur sys_refcursor;
v_ename varchar2(50);
procedure pro_1(p_cur out sys_refcursor) as
begin
--子程序1
open p_cur for
select ename from scott.emp;
end;
procedure pro_2(p_cur out sys_refcursor) as
begin
--子程序2
pro_1(p_cur);
end;
begin
--主程序
pro_2(p_cur);
fetch p_cur
into v_ename;
end;
运行报错:
ORA-06504: PL/SQL: 结果集变量或查询的返回类型不匹配
经调试发现在主程序fetch时出错。
同样代码在数据库 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit 版本下正常执行。