PL/SQLを駆使してデータを更新する。

ちょっと複雑な更新をしなきゃいけないので、
改めてPL/SQLを勉強したいと思いました。
SQLパズル』にはめぼしいものがなかったので、別の本から・・・


今考えてるやりかたは、

  1. 一時表を作成し、データをコピーしておく。
  2. PL/SQLでupsertしていく。


一時表の作成

-- トランザクション終了時にデータが削除される一時表の作成
CREATE GLOVAL TEMPORARY TABLE 一時表名 ON COMMIT DELETE ROWS
    表定儀;
-- セッション終了時にデータが削除される一時表の作成
CREATE GLOVAL TEMPORARY TABLE 一時表名 ON COMMIT PRESERVE ROWS


PL/SQLでupsertの例文

MERGE INTO 更新対象の表 a
    USING 一時表 b
    ON a.列1 = b.列x
WHEN MATCHED THEN UPDATE SET a.列2 = b.列y, a.列3 = b.列z
WHEN NOT MATCHED THEN INSERT VALUES (b.列A, b.列B, b.列C);