私のコード (Java) では、コードの実行後にデータベース (DB2) に行が存在することを確認したいです。
私のコードは現在 を実行しselect
、結果が返されない場合は を実行しますinsert
。このコードは、マルチスレッド環境で実行するときに同時実行の問題が発生する可能性があるため、あまり気に入りません。
私がやりたいのは、このロジックを Java コードではなく DB2 に配置することです。DB2 にはステートメントがありますかinsert-or-update
? または、使用できる同様のものはありますか?
例えば:
insertupdate into mytable values ('myid')
別の方法としては、常に挿入を実行し、「SQL コード -803 主キーが既に存在します」というエラーをキャッチする方法がありますが、可能であればこれを避けたいと思います。
ベストアンサー1
はい、DB2 には MERGE ステートメントがあり、UPSERT (更新または挿入) を実行します。
MERGE INTO target_table USING source_table ON match-condition
{WHEN [NOT] MATCHED
THEN [UPDATE SET ...|DELETE|INSERT VALUES ....|SIGNAL ...]}
[ELSE IGNORE]
見る:
https://www.ibm.com/developerworks/community/blogs/SQLTips4DB2LUW/entry/merge?lang=en