簡體   English   中英

使用MERGE在Oracle中刪除和插入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM