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

时间:2018-06-02 09:10:12

标签: oracle plsql cursor

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

  

错误 - SQL状态[24000];错误代码[6511]; ORA-06511:PL / SQL:游标已经打开
  ORA-06512:在“PACKAGE”,第3行
  ORA-06512:在“APPS.TLN_AR_ONLINE_LIST2_PKG”,第17行

     

嵌套异常是java.sql.SQLException:ORA-06511:PL / SQL:游标已经打开
  ORA-06512:在“PACKAGE”,第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行。

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

我们在所有块中都没有找到数据但没有找到TOO_MANY_ROWS的异常处理,包括当我们从第17行打开游标时。

有人可以帮助/建议这个问题吗?

1 个答案:

答案 0 :(得分:0)

在打开游标(在本示例中为c_main_script_1)之前,请执行以下操作:

if c_main_script_1%isopen then
    close c_main_script_1;
end if;

-利亚·贾维斯(Leah Jarvis)