Выдает конкретные сообщения об ошибках в Oracle Oracle ... ловить в спящем режиме? - PullRequest
2 голосов
/ 09 октября 2009

Можно ли выдать конкретное сообщение об ошибке в хранимой процедуре PL / SQL-оракула и перехватить его в Hibernate при вызове?

Ответы [ 2 ]

6 голосов
/ 09 октября 2009

Вы можете выдавать пользовательские сообщения об ошибках из кода PL / SQL. Коды ошибок от -20000 до -20999 зарезервированы для указанных пользователем сообщений об ошибках.

Вы делаете это, вызывая функцию raise_application_error в вашем PL / SQL:

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

Это будет распространяться как обычные ошибки Oracle.

Edit:

Я не пользователь Hibernate, но я нашел это, пытаясь найти ответ, и я думаю, что он приведет вас на правильный путь.

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 голосов
/ 09 января 2017

вы можете использовать выходной параметр в pl / sql и выбрать вывод в вашем коде, используя ParameterMode.OUT

СОЗДАНИЕ ИЛИ ЗАМЕНА процедуры proc (номер выхода pls_out_put);

// вывод вызова

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

int result = (Integer) 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);
    }
...