Вызов хранимой процедуры из Java - исключение не выдается при ошибке ORA

2

Я CallableStatement процедуру Oracle из Java и не имею проблем с отправкой значений входных параметров и возвращением значений выходных параметров к Java после выполнения CallableStatement.

Однако, когда я отправляю некоторые плохие данные в Хранимую процедуру (чтобы вызвать ошибку) и выполнить CallableStatement execute CallableStatement, я ожидаю, что в моем методе будет CallableStatement SQLException. Этого не происходит, и код продолжается как обычно.

Когда я запускаю хранимую процедуру через SQL Developer, я могу отчетливо видеть сообщение об ошибке oracle (код ORA-06502), отображаемое в окне журнала. Поэтому для меня загадка, почему мой Java-код не попадает в сообщение об ошибке.

Кто-нибудь имеет представление о том, что является источником такого поведения? Является ли хранимая процедура неправильной ошибкой ошибки; Java try/catch не распознает исключение? К сожалению, у меня нет доступа к коду Stored Proc, чтобы проверить, как они обрабатывают ошибки.

Любые указатели оцениваются.

  • 0
    Я не верю, что SQLException выбрасывается, если хранимый процесс закодирован, чтобы явно сделать это. community.oracle.com/thread/129500?start=0&tstart=0 . Нет сомнений, что JVM поймает его, если будет сгенерировано исключение.
  • 1
    Покажите нам код процедуры и код Java, который вызывает процедуру
Теги:
stored-procedures
jdbc
try-catch

2 ответа

0
Лучший ответ

Java не бросает SQLException, потому что функция хранимой процедуры вызова Java (CallableStatement) успешно отправила команду Oracle. Если эта процедура выполняется с успехом, метод CallableStatement дает нам 0, иначе отличный от 0, поэтому вы не видите SQLException.

Но в случае SQLDevelopper, это истинный интерпретатор SQL для Oracle, поэтому вы можете увидеть SQLException.

0

Исключение выдается только тогда, когда ваш первый исполняемый файл не работает в хранимой процедуре. Если только один оператор выполняется правильно, за исключением того, что первое исключение не будет выбрано.

Вы можете попробовать поставить транзакцию в самой хранимой процедуре и перехватить исключение, если какой-либо оператор завершится с ошибкой и выбросить исключение из блока catch. Все это в хранимой процедуре.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню