以下过程(在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;
答案 0 :(得分:7)
您想使用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;
答案 1 :(得分:3)
您可以尝试使用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;