2009-10-09 71 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); 
    }