首页 > 解决方案 > 如何在只读源表和更新表之间共享 id

问题描述

我有两个表:第一个 A 是只读的,源表,第二个 B 正在应用程序流中更新(插入新数据)。假设我想用来自 A 的新源数据填充表 B,并且其中一个 A id 已经被 B 通过一些插入“获取”。如何预防此类事件?

标签: sqloracleprimary-key

解决方案


您正在寻找合并语法,它是 upsert查询(又名更新/插入)的 Oracle 实现。

它是这样的:

merge into tableb b
using tablea a on (a.id = b.id)
when matched then
    update set b.col1 = a.col1
when not matched then
    insert(id, col1, col2, col3) values(a.id, a.col1, a.col2, a.col3)

using子句有on一部分定义表之间的连接条件。

matched子句描述了发生冲突时要做什么:在这里,您可以更新其他一些列。

not matched子句执行实际的插入。


推荐阅读