хранимая процедура spring & plsql - обработка исключений и транзакции - PullRequest
1 голос
/ 18 ноября 2010

Мне нужно вызвать хранимую процедуру оракула из весны (через Hibernate).

Я не знаком с PL / SQL, поэтому мне хотелось бы узнать, как это сделать.

1) Могу ли я использовать Spring / Hibernate (например, аннотации), чтобы начать / закрыть транзакцию. Я предполагаю, что это не проблема, и мне не нужно начинать / закрывать внутри хранимой процедуры.

2) В упомянутой процедуре я открываю и закрываю курсор, но в случае исключения я хотел бы закрыть его и перебросить исключение для части Java, поэтому вот что я сделал:

EXCEPTION
  WHEN OTHERS THEN
   CLOSE my_cursor; 
   RAISE e_cannot_do_sth;

Я хочу вызвать исключение, чтобы я мог сообщить пользователю, что что-то пошло не так ...

Каков наилучший способ сделать это?

1 Ответ

1 голос
/ 20 ноября 2010
  1. Да, вы можете использовать Spring для управления транзакциями.Я не думаю, что Hibernate даст вам большую выгоду здесь.

  2. Чтобы вызвать исключение, используйте следующее:

    raise_application_error(errno, 'Error Message of your choice');

Где errno - число от -20000 до -20999.Затем в своем Java-коде перехватите org.springframework.jdbc.UncategorizedSQLException, извлеките корневое SQLExcection следующим образом:

private SQLException digOutSqlException(UncategorizedSQLException t) {
  Throwable root = t;
  while (root.getCause() instanceof SQLException) {
    return (SQLException)root.getCause();
  }
  return null;
}

И вызовите getErrorCode() в SQLException, чтобы получить пользовательскую ошибку PL / SQL errorчисло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...