Ловля RAISE_APPLICATION_ERROR с помощью springframework SimpleJdbcCall - PullRequest
0 голосов
/ 05 мая 2020

У меня есть процедура PL / SQL, в которой я вызываю

RAISE_APPLICATION_ERROR (-20001, 'Illegal id');

, если что-то пойдет не так.

Кажется, это работает, потому что процедура завершается и выдает ошибку, когда это необходимо.

Я вызываю эту процедуру, используя

simpleJdbcCall.execute(myargs)

Но когда я перехватываю исключение, оно имеет тип DataAccessException. Причина - ORA-01403: данные не найдены

Похоже, у меня нет способа получить номер или сообщение из моего вызова RAISE_APPLICATION_ERROR. Как я могу получить эти значения?

1 Ответ

0 голосов
/ 09 мая 2020

Мы делаем то же самое в нашем приложении; однако исключения ORA-20001 должны поступать в Spring как UncategorizedSQLException. Если вы видите ORA-01403, то я подозреваю, что ваша процедура не работает по-другому: уверены ли вы, что Spring передает те же аргументы, с которыми вы проводите модульное тестирование?

Что, если вы сделаете свой PL / SQL процедура не делает ничего, кроме поднятия ORA-20001, вы все еще получаете ORA-01403 от Spring? Вы уверены, что проводите модульное тестирование своего PL / SQL и подключаете свое приложение Java к той же базе данных?

...