В последнее время мы видим следующую ошибку в журнале нашего приложения, это происходит только иногда (раз в неделю или около того), что наводит нас на мысль, что исключение курсора вызывается только каким-то конкретным входным условием / необработанным исключением.
Ошибка - состояние SQL [24000];код ошибки [6511];ORA-06511: PL / SQL: курсор уже открыт
ORA-06512: в "ПАКЕТЕ", строка 3
ORA-06512: в "APPS.TLN_AR_ONLINE_LIST2_PKG", строка 17
вложенное исключение - java.sql.SQLException: ORA-06511: PL / SQL: курсор уже открыт
ORA-06512: в "ПАКЕТЕ", строка 3
ORA-06512: в "ПАКЕТЕ \", строка 17 , "providerErrorMessage": "CallableStatementCallback;uncategorized SQLException для SQL
Итак, мы открыли пакет и проверили курсор и номер строки, из которой выдается ошибка.
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.
Кто-нибудь может помочь / предложить по этому вопросу?