【问题标题】:Throwing specific error messages in PLSQL Oracle...catching in hibernate?在 PLSQL Oracle 中抛出特定的错误消息...在休眠中捕获?
【发布时间】:2010-12-05 08:49:46
【问题描述】:

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

【问题讨论】:

    标签: java oracle hibernate stored-procedures plsql


    【解决方案1】:

    您可以在 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);
        }
    

    【讨论】:

      【解决方案2】:

      您可以从 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
          }
      }
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      相关资源
      最近更新 更多