2009-10-09 68 views

回答

5

您可以從PL/SQL代碼中拋出用戶定義的錯誤消息。 -20000到-20999之間的錯誤代碼保留給用戶指定的錯誤消息。

通過調用你的PL/SQL中的raise_application_error功能做到這一點:

raise_application_error(-20001, 'Your error code message here'); 

這就像正常的Oracle錯誤傳播。

編輯:

我不是休眠的用戶,但我發現這一點的同時試圖尋找一個答案,我認爲這會導致你在正確的道路。

try 
{ 
    // some hibernate calls 
} 
catch (GenericJdbcException ge) 
{ 
    if(ge.getCause() != null && ge.getCause() instanceof SQLException) 
    { 
     SQLException se = (SQLException)ge.getCause(); 

     // ***************************************************************** 
     // NOTE: THIS will be where you check for your customer error code. 
     // ***************************************************************** 
     if(se.getErrorCode() == -20001) 
     { 
      // your error handling for this case 
     } 
     else 
     { 
      throw ge; // do not swallow unhandled exceptions 
     } 
    } 
    else 
    { 
     throw ge // do not swallow unhandled exceptions 
    } 
} 
+0

我該如何捕捉到冬眠? – Egg 2009-10-09 14:52:50

+1

'org.hibernate.exception.GenericJdbcException'是一個hibernate異常(https://www.hibernate.org/hib_docs/v3/api/org/hibernate/exception/GenericJDBCException.html)。趕上它。 – 2009-10-09 15:30:07

+0

不錯的作業RC,應該是enuogh – Egg 2009-10-09 15:37:24

0

你可以在PL/SQL中使用輸出參數,並使用ParameterMode.OUT

挑輸出在代碼中創建或更換過程PROC(pls_out_put出數);

//調用輸出

query.registerStoredProcedureParameter("pls_out_put", Integer.class, ParameterMode.OUT);` 

INT結果=(整數)query.getOutputParameterValue( 「pls_out_put」);

if (result==1){ 
    message = new FacesMessage(FacesMessage.SEVERITY_INFO, "user defined message", "user defined message"); 

    FacesContext.getCurrentInstance().addMessage(null, message); 
    } else if(result==0) { 
     message = new FacesMessage(FacesMessage.SEVERITY_INFO, "User defined message", "user defined message"); 

     FacesContext.getCurrentInstance().addMessage(null, message); 
    }