Oracle 存储过程中错误代码的返回消息
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/8598601/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Return Message of Error code in Oracle Stored Proc
提问by Mike
The below procedure (in Oracle 11g release 1) accepts a sql as a parameter & returns its return code.
以下过程(在 Oracle 11g 第 1 版中)接受 sql 作为参数并返回其返回代码。
Returns 0 if success
如果成功则返回 0
Returns 1 if no update or no delete performs
如果没有更新或没有执行删除,则返回 1
Returns actual error code in case of failure.
失败时返回实际的错误代码。
How can I change below procedure to return me another out param say "return_message" which will contain short description of oracle internal error message? In case of success, it should say "success" and in case no delete/updates performed, it should say "nochange"
如何更改以下程序以返回另一个输出参数“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;
回答by Daniel Haviv
You want to use the SQLERRM function.
您想使用 SQLERRM 函数。
Here's your code:
这是你的代码:
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;
回答by John Doyle
You can try using SQLERRM to return the message. E.g.,
您可以尝试使用 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;