关于Oracle游标out参数多层调用的BUG,ORA-06504

Posted HH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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 版本下正常执行。

以上是关于关于Oracle游标out参数多层调用的BUG,ORA-06504的主要内容,如果未能解决你的问题,请参考以下文章

使用JPA调用存储过程,返回存储多行数据的OUT参数(游标)

Java 和数据库:关于使用多个结果集和游标

Oracle 存储过程中OUT参数的用法

Oracle存储过程,游标使用

JDBC操作存储过程存储函数out参数使用游标

Oracle中“IN”和“IN OUT”CURSOR参数的区别