从我的代码(Java)中,我想确保执行代码后数据库(DB2)中存在一行。
我的代码现在做了一个select
如果没有返回结果,它会执行insert
。我真的不喜欢这段代码,因为它使我在多线程环境中运行时面临并发问题。
我想要做的是将这个逻辑放入 DB2 而不是我的 Java 代码中。
DB2 有吗insert-or-update
陈述?或者我可以使用类似的东西?
例如:
insertupdate into mytable values ('myid')
另一种方法可能是始终执行插入并捕获“SQL 代码 -803 主键已存在”,但我想如果可能的话避免这种情况。
是的,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]
See:
http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/doc/r0010873.htm
https://www.ibm.com/support/knowledgecenter/en/SS6NHC/com.ibm.swg.im.dashdb.sql.ref.doc/doc/r0010873.html
https://www.ibm.com/developerworks/community/blogs/SQLTips4DB2LUW/entry/merge?lang=en
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)