2010-11-18 50 views
1

我需要從spring(通過Hibernate)調用oracle存儲過程。spring&plsql存儲過程 - 異常處理和事務

我不熟悉PL/SQL,所以我想知道如何繼續。

1)我可以使用spring/hibernate(例如註釋)來開始/關閉事務。我認爲這不是問題,我不必在存儲過程中開始/關閉。

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錯誤號。