【问题标题】:Return Message of Error code in Oracle Stored ProcOracle 存储过程中错误代码的返回消息
【发布时间】:2012-01-25 18:47:53
【问题描述】:

以下过程(在 Oracle 11g 第 1 版中)接受 sql 作为参数并返回其返回码。

如果成功则返回 0

如果没有更新或删除,则返回 1

在失败的情况下返回实际的错误代码。

如何更改以下程序以返回另一个输出参数“return_message”,其中将包含 Oracle 内部错误消息的简短描述?如果成功,它应该说“成功”,如果没有执行删除/更新,它应该说“nochange”

CREATE OR REPLACE PROCEDURE "demo"."run_demo"(v_sql IN VARCHAR2, return_code OUT number)
AS

i number;

BEGIN
   return_code := 0;
   execute immediate v_sql;
   i := sql%rowcount;

   IF (i<1)
     THEN return_code := 1;
   END IF;

EXCEPTION  
   WHEN OTHERS THEN
   return_code := SQLCODE;
END;

【问题讨论】:

    标签: oracle oracle10g oracle11g oracle9i


    【解决方案1】:

    您想使用 SQLERRM 函数。

    这是你的代码:

    CREATE OR REPLACE PROCEDURE "demo"."run_demo"(v_sql IN VARCHAR2, return_code OUT number, return_message out varchar2)
    AS
    
    i number;
    
    BEGIN
       return_code := 0;
       execute immediate v_sql;
       i := sql%rowcount;
    
       IF (i<1)
         THEN return_code := 1;
       END IF;
    
    EXCEPTION  
       WHEN OTHERS THEN
       return_message := SQLERRM;
       return_code := SQLCODE;
    END;
    

    【讨论】:

      【解决方案2】:

      您可以尝试使用 SQLERRM 返回消息。例如,

      create or replace procedure RUN_DEMO(V_SQL in varchar2, RETURN_CODE out number, RETURN_MSG out varchar2) as
        I                                number;
      begin
        RETURN_CODE := 0;
      
        execute immediate V_SQL;
      
        I := sql%rowcount;
      
        if (I < 1) then
          RETURN_CODE := 1;
        end if;
      exception
        when others then
          RETURN_CODE := sqlcode;
          RETURN_MSG := sqlerrm;
      end;
      

      【讨论】:

      • 忽略这个,丹尼尔领先我几分钟。
      猜你喜欢
      • 2016-01-21
      • 2010-12-06
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 2019-06-03
      相关资源
      最近更新 更多