假设 table 结构在 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?

基本上我有两个 tables,几乎有 46 列,现在我想要一些 PL/SQL 脚本,如果发现源 table A 到 table B(需要更新)有一个主键,将根据该主键进行比较,如果发现不相等则进行更新。

您可以使用 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;

通过使用 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;