Я CallableStatement
процедуру Oracle из Java и не имею проблем с отправкой значений входных параметров и возвращением значений выходных параметров к Java после выполнения CallableStatement
.
Однако, когда я отправляю некоторые плохие данные в Хранимую процедуру (чтобы вызвать ошибку) и выполнить CallableStatement
execute
CallableStatement
, я ожидаю, что в моем методе будет CallableStatement
SQLException
. Этого не происходит, и код продолжается как обычно.
Когда я запускаю хранимую процедуру через SQL Developer, я могу отчетливо видеть сообщение об ошибке oracle (код ORA-06502
), отображаемое в окне журнала. Поэтому для меня загадка, почему мой Java-код не попадает в сообщение об ошибке.
Кто-нибудь имеет представление о том, что является источником такого поведения? Является ли хранимая процедура неправильной ошибкой ошибки; Java try/catch
не распознает исключение? К сожалению, у меня нет доступа к коду Stored Proc, чтобы проверить, как они обрабатывают ошибки.
Любые указатели оцениваются.
Java не бросает SQLException, потому что функция хранимой процедуры вызова Java (CallableStatement) успешно отправила команду Oracle. Если эта процедура выполняется с успехом, метод CallableStatement дает нам 0, иначе отличный от 0, поэтому вы не видите SQLException.
Но в случае SQLDevelopper, это истинный интерпретатор SQL для Oracle, поэтому вы можете увидеть SQLException.
Исключение выдается только тогда, когда ваш первый исполняемый файл не работает в хранимой процедуре. Если только один оператор выполняется правильно, за исключением того, что первое исключение не будет выбрано.
Вы можете попробовать поставить транзакцию в самой хранимой процедуре и перехватить исключение, если какой-либо оператор завершится с ошибкой и выбросить исключение из блока catch. Все это в хранимой процедуре.