在Oracle存储过程中返回错误代码消息

Mik*_*ike 3 oracle oracle10g oracle9i oracle11g

以下过程(在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;
Run Code Online (Sandbox Code Playgroud)

Dan*_*viv 8

您想使用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;
Run Code Online (Sandbox Code Playgroud)