1

何千もの SQLINSERT INTO行を含むスクリプト ファイルがあります。これらの行の一部は、データベースに既に存在するデータを挿入するため、これらのエラーをキャッチしてバイパスしたいと考えています。トリガーによってスローされたエラーをキャッチして無視する方法はありますか?

ERROR at line 1:
ORA-20053: Username must be unique
ORA-06512: at "MY_TRIGGER", line 18
ORA-04088: error during execution of trigger 'MY_TRIGGER'
ORA-06512: at line 3

DUP_VAL_ON_INDEXaをキャッチしてから を実行することで、一意の制約を使用してこれを行うことができますNULLが、これは上記のトリガー エラーでは機能しません。

4

1 に答える 1

1

のようなデフォルトの例外ハンドラの 1 つを使用するのと同じように、独自の例外を定義して使用できますdup_val_on_index

DECLARE
  l_unique_username_ex exception;
  pragma exception_init( l_unique_username_ex, -20053 );
BEGIN
  <<your INSERT statement>>
EXCEPTION
  WHEN l_unique_username_ex
  THEN
    NULL; -- Ignore the error
END;

ただし、一般的には、トリガーにフラグを立てさせてからエラーを無視するよりも、まだ存在しない行のみを挿入するようにスクリプトを変更する方が理にかなっています。

于 2012-09-17T20:00:25.587 に答える