MERGE INTO USER_MASTER
USING USER_MASTER_IMPORT
ON ( USER_MASTER.USER_ID = USER_MASTER_IMPORT.USER_ID)
-- 既存レコードの更新
WHEN MATCHED THEN
UPDATE SET
USER_NAME = USER_MASTER_IMPORT.USER_NAME,
DEPT_NO = USER_MASTER_IMPORT.DEPT_NO,
MODIFIED_ON = SYSDATE-- 新規レコードの作成
WHEN NOT MATCHED THEN
INSERT
( USER_ID, USER_NAME, DEPT_NO )
VALUES
( USER_MASTER_IMPORT.USER_ID,
USER_MASTER_IMPORT.USER_NAME || '(新人)',
USER_MASTER_IMPORT.DEPT_NO )
基本的なフォーマット
MERGE INTO <表名1 [エイリアス名]
USING 表名2 | 副問い合わせ [エイリアス名]
ON ( <結合条件> )
WHEN MATCHED THEN
UPDATE SET <カラム名> = < 値 >, …
WHEN NOT MATCHED THEN
INSERT [ (<カラム名>, … ) ]
VALUES ( <値> , … ) ;
MERGE INTO USER_MASTER
USING (
SELECT'0099'"USER_ID",
'入力した名前'"USER_NAME",
'0010'"DEPT_NO"
FROM DUAL
) phantom
ON (USER_MASTER.USER_ID = phantom.USER_ID)
-- または-- USING DUAL ON (USER_MASTER.USER_ID = '0099')-- -- 既存レコードの更新
WHEN MATCHED THEN
UPDATE SET
USER_NAME = USER_NAME || '(更新)',
MODIFIED_ON = SYSDATE-- 新規レコードの作成
WHEN NOT MATCHED THEN
INSERT
( USER_ID, USER_NAME, DEPT_NO )
VALUES
(phantom.USER_ID, -- or '0099'
phantom.USER_NAME,-- or '入力した名前'
phantom.DEPT_NO ) -- or '0010'