【发布时间】:2021-11-23 10:48:03
【问题描述】:
我正在使用 JDBI3(并且想使用 @SQLUpdate)和一个 Oracle 数据库。
我想在表中插入一个包含 4 列的项目,如果它不存在,如果它确实存在,我想更新项目的 4 个值中的 3 个。如果不是 Oracle,我会使用一些 ON DUPLICATE_KEY 逻辑,但这在 Oracle 中不存在。我读了一些关于使用 Merge 的东西,但是对于我想要做的事情来说,查询似乎真的很不稳定。关于寻找什么的任何提示?
附加问题:如果我应该使用 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)
【问题讨论】:
-
首先尝试保证成功的操作(即,如果该行通常存在则尝试更新,否则尝试插入)。如果语句失败(尝试插入后的任一 dup 键,否则没有更新行),捕获错误/警告并尝试另一个。 (数据库系统不会仅仅因为一条语句出错就中止事务)。