鉴于oracle中的表结构相同,如何从tableA更新tableB中数据不相同的行?
Posted
技术标签:
【中文标题】鉴于oracle中的表结构相同,如何从tableA更新tableB中数据不相同的行?【英文标题】:How to update the rows that are not identical in terms of data in a tableB from tableA given that table structure are same in oracle? 【发布时间】:2015-05-25 08:01:50 【问题描述】:基本上我有两个几乎有 46 列的表,现在我想要一些 PL/SQL 脚本,如果发现源表 A 到表 B 不相等(需要更新),则可以更新行进行比较的基础,如果发现不相等,则在更新后进行比较。
【问题讨论】:
【参考方案1】:你可以使用MERGE来做到这一点
假设如果 PK 不匹配,您需要更新所有列,那么这是一个通用语法:
MERGE INTO table_b
USING
(
SELECT column1, ... column48
FROM table_a
) a ON (b.pk = a.pk)
WHEN NOT MATCHED THEN UPDATE
SET a.column1 = b.column1,
.....
a.column46 = b.column46;
【讨论】:
通过上述解决方案,我收到以下错误 -ORA-00905: missing keyword
@Bharat 请您发布您的代码或其中的一部分
其实比较PK也是列之一,比如说ID,我们在此基础上匹配并更新其他列。【参考方案2】:
通过使用 MERGE,我得到了满足我的问题中提到的要求的正确答案。
MERGE INTO TABLE_A
USING
(
SELECT * FROM TABLE_B
) T
ON
(
TABLE_A.PK=TABLE_B.PK
)
WHEN MATCHED THEN UPDATE
SET TABLE_A.COL1 = T.COL1,
...
TABLE_A COL46 = T.COL46;
【讨论】:
你几乎复制粘贴了我的答案:) @Hawk 是的,这就是灵感的来源 :)以上是关于鉴于oracle中的表结构相同,如何从tableA更新tableB中数据不相同的行?的主要内容,如果未能解决你的问题,请参考以下文章