[英]Using MERGE for delete and insert in oracle
而不是更新,我的DBA要求我刪除然后將值插入表中以提高性能。 我需要在這里使用合並。 我以前沒有從事過合並工作。 我該如何進行? 下面給出的是刪除和插入查詢。 可以合並用於刪除和插入而無需任何更新嗎?
DELETE FROM hist_tab1 hist
WHERE hist.tranid IN (SELECT t.tranid
FROM transaction_tab t
WHERE t.tran_status =
'Posted');
INSERT INTO hist_tab1 (tranid,
tranamt,
date,
post_date,
isvalid,
salescode)
(SELECT tnr.tranid,
tranamt,
date,
post_date,
isvalid,
salescode
FROM tab1 tnr,
(SELECT tranid
FROM transaction_tab t
WHERE t.tran_statu IN ('Posted','Verified')) tt
WHERE tnr.tranid = tt.transid);
刪除適用於更新。 但它只會刪除目標表更改並滿足where子句的行。 否則,您可以使用一些虛擬列,然后嘗試更新並將delete子句放在其下。
例如
Merge into hist_tab1 src using
((SELECT tnr.tranid,
tranamt,
date,
post_date,
isvalid,
salescode
FROM tab1 tnr,
(SELECT tranid
FROM transaction_tab t
WHERE t.tran_statu IN ('Posted','Verified')) tt
on tnr.tranid = src.transid
when matched then update src.dummy = tt.dummy
delete where tt.tranid IN (SELECT t.tranid
FROM transaction_tab t
WHERE t.tran_status =
'Posted')
when not matched INSERT (src.tranid,
src.tranamt,
src.date,
src.post_date,
src.isvalid)
values
(trg.tranid,
trg.tranamt,
trg.date,
trg.post_date,
trg.isvalid
)
)銷售代碼)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.