Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle PL/SQL异常ORA-06511游标已打开_Oracle_Plsql_Cursor - Fatal编程技术网

Oracle PL/SQL异常ORA-06511游标已打开

Oracle PL/SQL异常ORA-06511游标已打开,oracle,plsql,cursor,Oracle,Plsql,Cursor,最近,我们在应用程序日志中看到了以下错误,这种情况只是偶尔发生(大约一周发生一次),这使我们相信游标异常只是由某些特定的输入条件/未处理的异常引发的 错误-SQL状态[24000];错误代码[6511];ORA-06511:PL/SQL:光标已打开 ORA-06512:在“包装”处,第3行 ORA-06512:APPS.TLN\u AR\u ONLINE\u LIST2\u PKG,第17行 嵌套异常为java.sql.SQLException:ORA-06511:PL/sql:cursor已打

最近,我们在应用程序日志中看到了以下错误,这种情况只是偶尔发生(大约一周发生一次),这使我们相信游标异常只是由某些特定的输入条件/未处理的异常引发的

错误-SQL状态[24000];错误代码[6511];ORA-06511:PL/SQL:光标已打开
ORA-06512:在“包装”处,第3行 ORA-06512:APPS.TLN\u AR\u ONLINE\u LIST2\u PKG,第17行

嵌套异常为java.sql.SQLException:ORA-06511:PL/sql:cursor已打开
ORA-06512:在“包装”处,第3行 ORA-06512:在“PACKAGE\”第17行“providerErrorMessage”:“CallableStatementCallback;SQL的未分类SQLException

因此,我们打开包,检查光标和抛出错误的行号

1.     CURSOR c_t_num (trx_num_tran.trx_number%TYPE)
2.     IS
3.        SELECT interface_header_attribute1**
4.          FROM ra_customer_trx_all
5.         WHERE trx_number = trx_num;
6.           OPEN c_t_num (trx_list_rec.trx_number);
7.  
8.           FETCH c_t_num
9.            INTO t_rf_trx_number;
10. 
11.          IF c_t_num%NOTFOUND
12.          THEN
13.             t_rf_trx_number := NULL;
14.          END IF;
15. 
16.          CLOSE c_t_num;
17. OPEN c_t_num (p_trx_num);
18. 
19.       FETCH c_t_num
20.        INTO t_trx_number;
21. 
22.       IF c_t_num%NOTFOUND
23.       THEN
24.          t_trx_number := NULL;
25.       END IF;
26. 
27.       CLOSE c_t_num;
28. 

29. OPEN c_t_num (v_trx_num);
30. 
31.       FETCH c_t_num
32.        INTO t_trx_num_ritel;
33. 
34.       CLOSE c_t_num;
35. 
36.       RETURN (t_trx_num_ritel);
37.    END get_trx_number;
现在,光标在第6、17和29行被打开。但异常总是显示行号3(光标定义的选择)和行号17

这是否是一个隐式类型的游标(这是一个遗留代码),我们认为异常处理可能是问题所在

在所有块中,包括从第17行打开光标时,我们对未找到数据进行了异常处理,但对太多的行没有异常处理

有人能在这个问题上提供帮助/建议吗?

在打开光标(在这个名为
c\u main\u script\u 1的示例中)之前,请执行以下操作:


-Leah Jarvis

代码看起来无效。像这样的游标需要在
declare
部分声明,即在
函数get\u trx\u number之间。。。是
开始
。您不能从
光标c\t\u num是…
转到
打开c\t\u num
。此外,我没有看到任何异常处理,也没有发现任何
找不到数据
太多行
的情况。虽然您发布的代码看起来不完整,但在“偶尔(一周左右)”发生的情况下,我们甚至很难进行调试。这是您的数据库和环境设置,您最清楚发生这种情况的原因。一种方法是将代码中的更多信息添加到日志中,并尝试在测试设置中重新创建那个神秘的场景。我怀疑是否有人能在这方面给你更多的帮助,除非你提供更多的线索来说明问题所在。嗨-我只粘贴了一个片段,我不能粘贴整个代码,declare部分不包含任何数据,但我无法看到太多行的异常处理。我和BA谈过,显然预期的行为是只获取/检索1行。我们怀疑某些功能更改正在破坏这一点,并且游标和匹配行之间的1-1映射被破坏
if c_main_script_1%isopen then
    close c_main_script_1;
end if;