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)
您想使用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)