如果不存在则插入,如果存在则更新某些值



我正在使用JDBI3(并且希望使用@SQLUpdate(和Oracle数据库。

如果表中不存在一个有4列的项,我想将其插入表中;如果它确实存在,我想更新该项的4个值中的3个。如果不是Oracle,我会使用一些ON DUPLICATE_KEY逻辑,但这在Oracle中并不存在。我读过一些关于使用Merge的文章,但对于我想要做的事情,Queries似乎真的很不稳定。有什么建议吗?

附加问题:如果我应该使用Merge(我假设使用某种形式的子查询(,那么查询如何影响性能?我觉得这个数据库写得太重了。

MERGE INTO device db USING (SELECT 'abc' AS col1, 'bcd' as col2, 'cde' as col3, 'def' as col4 FROM DUAL) input
on (db.col1 = input.col1 AND db.col2= input.col2)
WHEN MATCHED THEN UPDATE
SET db.col4 = input.col4
WHEN NOT MATCHED THEN INSERT
(db.col1, db.col2, db.col3, db.col4)
VALUES (input.col1, input.col2, input.col3, input.col4)

Merge it is。执行良好。

基于您描述的伪示例:

merge into target_table a
using source_table b
on (a.id = b.id)
when matched then update set
a.name = b.name,
a.job  = b.job,
a.sal  = b.sal
when not matched then 
insert (id, name, job, sal) 
values (b.id, b.name, b.job, b.sal);

相关内容

  • 没有找到相关文章

最新更新