某些会话导致ORA-29471,因为dbms_sql无法用于这些会话.我们在应用程序中遇到此错误的记录很少.
解决方法
错误发生在运行时.你可能无法猜测它会在它发生之前发生.也许您的解决方案是使用要打开dbms_sql.is_open(c_id)的游标ID进行单个块检查.
但如果这是你正在寻找的,这里是如何找到打开的游标列表:
select a.value,s.username,s.sid,s.serial# from v$sesstat a,v$statname b,v$session s where a.statistic# = b.statistic# and s.sid=a.sid and b.name = 'opened cursors current' ;
您还可以访问v $open_cursor来计算它们:
SELECT * FROM v$open_cursor oc,v$session s WHERE oc.sid = s.sid order by 3,2;
希望这可以帮助您调整一些东西来检查是否使用了预期的光标.