Oracleで主キーの競合時にエラーを発生させないようにするにはどうすればよいですか?

Oracleでは、プライマリキー重複時にデータを挿入または更新すると自動的にエラーとなり例外が送出されます。プライマリキー重複時にエラーを出したくない場合は、以下の2つの方法で実現できます。

  1. MERGE文を使用する:MERGE文は1つの文で挿入と更新を実行でき、かつ主キーの衝突エラーを回避できます。例を次に示します。
MERGE INTO table_name t
USING (SELECT 'value1' AS col1, 'value2' AS col2 FROM dual) s
ON (t.primary_key = s.primary_key)
WHEN MATCHED THEN UPDATE SET t.col1 = s.col1, t.col2 = s.col2
WHEN NOT MATCHED THEN INSERT (col1, col2) VALUES (s.col1, s.col2);

そうすると主キー衝突のデータが挿入された場合、システムは自動的に更新操作を実行し、エラーは返しません。

  1. 主キーの競合の有無を最初にコンディショナルステートメントで判断し、競合がある場合は更新するか挿入を無視するようにコンディショナルステートメントを使用する:
IF NOT EXISTS (SELECT 1 FROM table_name WHERE primary_key = 'value') THEN
-- 执行插入操作
INSERT INTO table_name (primary_key, col1, col2) VALUES ('value', 'value1', 'value2');
ELSE
-- 执行更新操作
UPDATE table_name SET col1 = 'value1', col2 = 'value2' WHERE primary_key = 'value';
END IF;

データに主キーの競合が含まれている場合、システムは条件式に基づき、更新操作を実行するか、挿入を無視するかを選択します。

bannerAds