在Oracle SQL中进行MERGE时,如何更新SOURCE中不匹配的行?
技术问答
278 人阅读
|
0 人回复
|
2023-09-14
|
我有一个main数据库和一个report数据库,我需要将表从同步main到report。# J3 m/ R" b8 k& o1 F) v+ g
但是,当某项在main数据库中删除时,我只想IsDeleted在report数据库中设置一个标志。1 e* m8 ~! a6 F% \( |5 u
有什么优雅的方法可以做到这一点?
; X( B$ u# O5 r! w* J# p4 w( r$ Z$ ~我目前正在使用MERGE语句,如下所示:
8 \/ N2 n7 j7 m1 w$ K, eMERGE INTO report.TEST target. C2 q1 R. ~& z/ _) \3 |
USING (SELECT * FROM main.TEST) source9 v+ a# S- o( B
ON (target.ID = source.ID)$ X! S6 ^& H% }4 X! o) J9 M
WHEN MATCHED THEN/ r. _" A% C1 ?
UPDATE SET (target... = source...)& L8 [5 \6 |% O% S: o
WHEN NOT MATCHED THEN
# W2 X" C4 q9 ~) w. O INSERT (...) VALUES (source...)
Z: M5 j9 j( v* j$ L" Y;+ r% Z0 Q- Y+ P! m: q# K; q% R
该WHEN NOT MATCHED语句为我提供了来自的所有新值main,但我也想更新来自的所有旧值report。
\9 N7 a2 ]& [( u9 T我正在使用Oracle PL / SQL。
) `# h6 [! x9 c' N1 h; X7 i8 ]
) @8 u/ P5 D } i9 M( I解决方案:
" U# d4 I+ z7 G6 H
1 ]1 h u5 s- m0 g" g: A/ T* N! Z
$ V1 v6 y0 ^0 }/ |. c# k6 h
您可以使用单独的UPDATE语句来完成此操作) s, Q: p$ i0 y: x! u {
UPDATE report.TEST target+ ~" k T9 e8 E% D* N# T
SET is Deleted = 'Y'
" p& T9 [3 }; h; ?( b9 QWHERE NOT EXISTS (SELECT 13 G1 J; h) \% b* ?5 i& C8 f$ r( C
FROM main.TEST source2 z+ h! M3 n/ f5 j' n7 y8 e* h
WHERE source.ID = target.ID);
' d0 c7 D/ p5 \我不知道有什么方法可以将其集成到您的MERGE语句中。 |
|
|
|
|
|