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');
.....

結果:

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

結果を次のように表示したい:

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

raise_application_error 関数の後に DOPL を配置しようとしましたが、まだ機能していません。アプリケーション エラーを発生させ、エラー メッセージとコードを取得して、それらを oracle 開発者の出力コンソールに出力したいと考えています。

4

2 に答える 2

2

問題を理解しているかどうか完全にはわかりません。DOPLが略語でdbms_output.put_lineSQLCODE-20021SQLERRMになり、「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;
于 2012-04-16T15:48:50.857 に答える
0

ポストされたプロシージャは別のプロシージャから呼び出されていますか? それとも別の方法で実行していますか?

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

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

... -20021 エラーは表示されず、DBMS_OUTPUT 出力のみが表示されます。

于 2012-04-16T15:48:15.950 に答える