merge同時包含增、改、刪

咱們都知道oracle merge能夠用來增和改,不多用它來刪除。可是有時候咱們仍然須要該特性,以提升性能,典型的場景就是將業務庫邏輯刪除的記錄同步到查詢庫的時候,作真正的物理刪除,這個時候merge的delete子句就再恰當不過了。以下所示:mysql

MERGE INTO A
USING (EMPLOYEE) B
ON (A.EMPLOYEEID = B.EMPLOYEEID AND A.YEAR = B.YEAR)
WHEN MATCHED THEN
UPDATE SET balance = b.balance
DELETE WHERE b.is_deleted = '1'

特別說明:
DELETE字句只能寫在MATCHED狀況中,不匹配時沒法刪除會報錯。
當DELETE跟在UPDATE字句以後時,DELETE字句是針對UPDATE字句修改後的數據進行過濾的。好比須要刪除全部C字段="1"的數據,UPDATE字句將全部數據的C字段都更新爲1,那麼會刪除全部數據,而不是本來爲1的數據。sql

可是在jdbc的addbatch上,彷佛merge的支持不像mysql那麼直接,須要先insert臨時表,而後merge,這樣的效率最佳。oracle

相關文章
相關標籤/搜索