2011-12-22 5 views
1

以下のプロシージャ(Oracle 11gリリース1)では、パラメータとして&が戻りコードを戻すsqlを受け入れます。Oracleストアド・プロクシのエラー・メッセージのメッセージを返します

戻り0

成功

場合に1を返しない更新または全く削除を行う

は、障害が発生した場合に実際のエラーコードを返していない場合。

「return_message」という、別のoutパラメータを返すために、以下の手順を変更するにはどうすればよいですか?Oracle内部エラーメッセージの簡単な説明が含まれていますか?成功した場合には、それは「成功」と言うと何の削除/更新が行われていない場合にする必要があり、それはあなたがSQLERRM関数を使用したい

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

を「NOCHANGEを」と言うべきです。

ここにあなたのコードは次のとおりです。

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

これを無視して、ダニエルは数分で私を倒しました。 –

関連する問題