2010-11-18 3 views
1

Мне нужно вызвать хранимую процедуру oracle с весны (через Hibernate).spring & plsql хранимая процедура - обработка исключений и транзакции

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

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

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

EXCEPTION 
    WHEN OTHERS THEN 
    CLOSE my_cursor; 
    RAISE e_cannot_do_sth; 

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

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

ответ

1
  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.

Смежные вопросы