電気ウナギ的○○

About Home

MERGE の書き方、間違ってた

shinoda (2008年9月12日 18:06)

画面から入力した顧客番号と担当者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)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/126

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE