2012-04-16 5 views
1
...PROCEDURE... 
..... 
WHEN DUP_VAL_ON_INDEX THEN 
DBMS_OUTPUT.PUT_LINE(SQLCODE || ' ' || SQLERRM); 
RAISE_APPLICATION_ERROR(-20021, 'Attempted to add duplicate primary key into table A2PROD'); 
..... 

結果:私はRAISE_APPLICATION_ERROR関数の後DOPLを入れてみましたが、まだ動作していないraise_application_error()から情報を取得するには?

-20021 ORA-20021 Attempted to add duplicate primary key into table A2PROD 

-1 ORA-00001: unique constraint (SYSTEM.SYS_C004235) violated 

私はその結果を示したいと思います。 アプリケーションエラーを発生させ、エラーメッセージとコードを入手して、oracleデベロッパーの出力コンソールに出力します。

答えて

0

他のプロシージャから呼び出されたプロシージャは呼び出されていますか?それとも別の方法で走っていますか?

RAISE_APPLICATION_ERRORは例外番号とそのメッセージを呼び出しプログラムに渡します。だからは何ですか?の例外はありますか?例えば、それはこのような貧弱な例外ハンドラを、持っている場合...

 your_proc_here(p_new_id=>1); 
exception 
    when others then 
     null; 
end; 

...あなたは-20021エラー、ちょうどDBMS_OUTPUT出力を見ることはないでしょう。

2

私はこの問題を十分に理解していません。 DOPLdbms_output.put_lineの略語で、SQLCODEを-20021、SQLERRMを「ORA-20021:表A2PRODに重複する主キーを追加しようとしました」とする場合は、dbms_output.put_lineコールをキャッチする例外ハンドラに入れる必要がありますカスタムエラーメッセージ。もちろん、あなたも同様のことをすることができます

WHEN dup_val_on_index 
THEN 
    l_err_code := -20021; 
    l_err_msg := 'Attempted to add duplicate primary key into table A2PROD'; 
    dbms_output.put_line(l_err_code || ' ' || l_err_msg); 
    raise_application_error(l_err_code, l_err_msg); 
END; 
関連する問題