最近我们在应用程序日志中看到以下错误,这种情况有时只发生一次(大约一周一次),这使我们相信只有某些特定的输入条件/未处理的异常才抛出游标异常。
错误 - 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行打开游标时。
有人可以帮助/建议这个问题吗?
答案 0 :(得分:0)
在打开游标(在本示例中为c_main_script_1
)之前,请执行以下操作:
if c_main_script_1%isopen then
close c_main_script_1;
end if;
-利亚·贾维斯(Leah Jarvis)