我有一个main
数据库和一个report
数据库,需要将main
数据库中的一个表同步到report
数据库。
然而,当在main
数据库中删除一个项目时,我只想在report
数据库中设置一个IsDeleted
标志。
有没有一种优雅的方法来实现这个需求呢?
我目前正在使用MERGE语句,像这样:
MERGE INTO report.TEST target
USING (SELECT * FROM main.TEST) source
ON (target.ID = source.ID)
WHEN MATCHED THEN
UPDATE SET (target... = source...)
WHEN NOT MATCHED THEN
INSERT (...) VALUES (source...)
;
WHEN NOT MATCHED
语句可以从main
表中获取所有的新值,但我也想更新来自report
表中的所有旧值。
我正在使用Oracle PL/SQL。
main.test
?你会从哪里获取它们? - user330315main.test
中删除了一行,则相应的report.test
行将不匹配。我想为所有不匹配的行设置report.test.IsDeleted
标志。 - Scott Rippeyusing (...)
)的结果不会包含该行。那么这些数据应该从哪里来? - user330315MERGE
和LEFT OUTER JOIN
相似吗?我猜我希望它也有一个FULL OUTER JOIN
选项。 - Scott RippeyWHEN NOT MATCHED ON SOURCE
子句,可以执行FULL OUTER JOIN
!我找不到太多关于它的文档,但我在Oracle中尝试了一下,没有成功,所以我想看看其他选项。 - Scott Rippey