2011-12-22 50 views
1

以下过程(在Oracle 11g版本1中)接受sql作为参数&返回其返回代码。Oracle存储过程中的错误代码返回消息

返回0,成功

返回1,如果没有更新或在故障的情况下没有删除执行

返回实际的错误代码。

我该如何改变下面的过程来返回我另一个出来参数说“return_message”,它将包含oracle内部错误消息的简短说明?在成功的情况下,它应该说是“成功”,并在案件没有删除/更新完成,应该说“NO-CHANGE”

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; 

回答

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; 
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; 
+0

忽略这一点,丹尼尔打了我几分钟。 – 2011-12-22 02:32:51