鉴于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中数据不相同的行?的主要内容,如果未能解决你的问题,请参考以下文章

我想在sql server中创建一个包含从tableA到tableB的所有记录和列名的表[重复]

如何查看oracle 两个表结构是不是相同

如何对比两个相同数据库表的不同

如何将oracle数据库中的表导出指定结构的表?

如何从 VBA 中的表中获取唯一行?

如何从 oracle sql 中的一个列结构创建多个列的视图?