何千ものINSERTステートメントを含むSQLファイルがいくつかあります。これらのスクリプトを実行する際の問題は、一部のスクリプトが一意の制約に違反していることです。
私はもともと次のようなことをしました:
BEGIN
INSERT INTO .....;
INSERT INTO .....;
...
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
null;
END;
/
EXIT;
ただし、例外が発生した最初のインスタンスによってブロック全体が終了するように思われるため、残りのステートメントは実行されません。
私が使用しているOracleのバージョンは11ではないため、niceCONTINUEコマンドを使用できません。したがって、INSERTINTOステートメントごとに次のようなことを行うことを考えています。
BEGIN
INSERT INTO ....;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
null;
END;
/
...
sedを使用してSQLファイルの各行を読み取り、「INSERT INTO」という単語をスキャンし、存在する場合は、INSERT INTO行の間にBEGIN行とEXCEPTION行を追加するにはどうすればよいですか?その理由は、行が単なるコメントであり、それに追加したくない場合があるためです。