画面から入力した顧客番号と担当者CDをもとに HIGEHOGE_TBL を検索し、レコードが存在していれば UPDATE し、存在していなければ INSERT をする SQL。
MERGE で書いてみた。
MERGE INTO
HOGEHOGE_TBL A
USING (
SELECT
KYAKU_NO,
TANTOU_CD
FROM
HOGEHOGE_TBL
WHERE
KYAKU_TNO = '画面.顧客番号' AND
TANTOU_CD = '画面.担当者CD'
) B
ON (
A.KYAKU_NO = B.KYAKU_NO AND
A.TANTOU_CD = B.TANTOU_CD
)
WHEN MATCHED THEN
UPDATE SET
MEMO = '画面.メモ',
U_DATE = TRUNC(SYSDATE)
WHEN NOT MATCHED THEN
INSERT
(
KYAKU_NO,
TANTOU_CD,
MEMO,
I_DATE,
U_DATE
)
VALUES
(
'画面.顧客番号',
'画面.担当者CD',
'画面.メモ',
TRUNC(SYSDATE),
TRUNC(SYSDATE)
)
そしたら、一緒に仕事をしている若者から指摘された。
「これじゃあ、USING のところで検索結果が空のときに、'画面.顧客番号'と'画面.担当者CD' が ON 条件で使われないので駄目っすよ。必ず '画面.顧客番号'と'画面.担当者CD' が返るように組まないと駄目っす。」と。
なるほど。言われてみればそのとおり。
正解は、
USING (
SELECT
'画面.顧客番号' KYAKU_NO,
'画面.担当者CD' TANTOU_CD
FROM
DUAL
) B
ON (
A.KYAKU_NO = B.KYAKU_NO AND
A.TANTOU_CD = B.TANTOU_CD
)
または、いっそのこと、
USING
DUAL
ON (
A.KYAKU_TNO = '画面.顧客番号' AND
A.TANTOU_CD = '画面.担当者CD'
)
でもいいかな?
・・・こうして、世代交代が進んでいく。
(つか、MERGE 使うの初めてなんで許してくれ(^^;)
電気ウナギ的○○
About Backコメント(0)
電気ウナギ的○○