ORACLE多表級聯更新( MERGE、UPDATE FROM JOIN替代語句)


方法一:MERGE語句的語法

MERGE INTO 表名 
USING 表名/視圖/子查詢 ON 連接條件 --多個條件注意()括起來
WHEN MATCHED THEN  -- 當匹配得上連接條件時
更新、刪除操作 
WHEN NOT MATCHED THEN  -- 當匹配不上連接條件時 
更新、刪除、插入操作

示例

MERGE INTO CAI_GRKMX a USING TMP_IMPHD b
ON (a.SPID=b.SPID AND a.PIHAO=b.PIHAO AND instr(b.pihao,a.djbh)>0)
WHEN MATCHED THEN 
 UPDATE SET a.HDUID=b.MXUID,a.HDBZ=1;
COMMIT;

 來自網上更好的說明

MERGE INTO dept60_bonuses b
USING (
           SELECT employee_id, salary, department_id
           FROM hr.employees
           WHERE department_id = 60
      ) e
ON (b.employee_id = e.employee_id)
-- 當符合關聯條件時
WHEN MATCHED THEN
     -- 將獎金為0的員工的獎金調整為其工資的20%
     UPDATE 
     SET b.bonus_amt = e.salary * 0.2
     WHERE b.bonus_amt = 0
     -- 刪除工資大於7500的員工獎金記錄
     DELETE 
     WHERE (e.salary > 7500)
-- 當不符合連接條件時
WHEN NOT MATCHED THEN
     -- 將不在部門為60號的,且不在dept60_bonuses表的用工信息插入,並將其獎金設置為其工資的10%
     INSERT 
     (b.employee_id, b.bonus_amt)
     VALUES 
     (e.employee_id, e.salary * 0.1)
     WHERE (e.salary < 7500)

方法二:作為多表級聯更新的另外一種寫法

UPDATE 
(SELECT a.HDUID,b.MXUID,HDBZ 
FROM CAI_GRKMX a
INNER JOIN TMP_IMPHD b ON a.SPID=b.SPID AND a.PIHAO=b.PIHAO AND instr(b.pihao,a.djbh)>0
) 
SET HDUID=MXUID,HDBZ=1 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM