Oracle でテーブル結合してMERGEするサンプル

2021年11月18日

環境
Oracle 12.2.0.1.0
書式

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
MERGE INTO テーブル1
USING テーブル2
ON 結合条件
WHEN MATCHED THEN
UPDATE構文
WHEN NOT MATCHED THEN
INSERT構文;
MERGE INTO テーブル1 USING テーブル2 ON 結合条件 WHEN MATCHED THEN UPDATE構文 WHEN NOT MATCHED THEN INSERT構文;
MERGE INTO テーブル1
 USING テーブル2
 ON 結合条件
WHEN MATCHED THEN
 UPDATE構文
WHEN NOT MATCHED THEN
 INSERT構文;

使用例

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
MERGE INTO USER_TBL AA
USING (
SELECT
UID,
ADDR,
FLG
FROM DEP_TBL
)BB
ON (AA.UID = BB.UID)
-- 条件に一致(テーブル名は記述しない)
WHEN MATCHED THEN
UPDATE SET
FLG = '更新'
-- 条件に一致しない(テーブル名は記述しない)
WHEN NOT MATCHED THEN
INSERT
(UID,
ADDR,
FLG
)
VALUES
(
BB.UID,
BB.ADDR,
'挿入'
);
MERGE INTO USER_TBL AA USING ( SELECT UID, ADDR, FLG FROM DEP_TBL )BB ON (AA.UID = BB.UID) -- 条件に一致(テーブル名は記述しない) WHEN MATCHED THEN UPDATE SET FLG = '更新' -- 条件に一致しない(テーブル名は記述しない) WHEN NOT MATCHED THEN INSERT (UID, ADDR, FLG ) VALUES ( BB.UID, BB.ADDR, '挿入' );
MERGE INTO USER_TBL AA
USING (
      SELECT
     	   UID,
            ADDR,
            FLG
            FROM DEP_TBL
      )BB
ON (AA.UID = BB.UID)

-- 条件に一致(テーブル名は記述しない)
WHEN MATCHED THEN
      UPDATE SET
        FLG = '更新'
        
-- 条件に一致しない(テーブル名は記述しない)
WHEN NOT MATCHED THEN
      INSERT 
            (UID,
             ADDR,
             FLG
             )
      VALUES
            (
            BB.UID,
            BB.ADDR,
            '挿入'
            );

説明
テーブル: USER_TBL DEP_TBL
判定条件:テーブル「USER_TBL」の「UID」とテーブル「DEP_TBL」の「UID」の比較
条件が一致する場合は、when matched thenが実行され、テーブルUSER_TBL をupdateします
条件が一致しない場合、when not matached thenが実行され、テーブルUSER_TBLをinsertします

Oracle

Posted by arkgame