在 PLSQL Oracle 中抛出特定错误消息...在休眠中捕获?

发布于 2024-08-07 20:54:15 字数 65 浏览 3 评论 0原文

是否可以在 PL/SQL oracle 存储过程中抛出特定的错误消息,并在调用它时在 Hibernate 中捕获它?

Is it possible to throw a specific error message in a PL/SQL oracle stored procedure and catch it in Hibernate when it gets invoked?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

哭了丶谁疼 2024-08-14 20:54:15

您可以从 PL/SQL 代码中抛出用户定义的错误消息。 -20000 到 -20999 之间的错误代码保留用于用户指定的错误消息。

您可以通过在 PL/SQL 中调用 raise_application_error 函数来执行此操作:

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

这将像正常的 Oracle 错误一样传播。

编辑:

我不是 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
    }
}

You can throw user-defined error messages from PL/SQL code. Error codes between -20000 until -20999 are reserved for user specified error messages.

You do so by calling the raise_application_error function within your PL/SQL:

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

This will be propagated just like normal Oracle errors.

Edit:

I am not a user of Hibernate, but I found this while trying to find an answer and I think it will lead you down the right path.

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
    }
}
以酷 2024-08-14 20:54:15

在代码中选择输出

您可以在 pl/sql 上使用输出参数,并使用 ParameterMode.OUT CREATE OR REPLACE procedure proc ( pls_out_put out number)

; //调用输出

 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);
    }

you can use output parameter on the pl/sql and pick output in your code using ParameterMode.OUT

CREATE OR REPLACE procedure proc ( pls_out_put out number);

//call output

 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);
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文