假设 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;
基本上我有两个 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;