久しぶりにOracleのネタ。MERGE文についてメモ。
データが有ればUPDATE、無ければINSERTを実行する構文。
Oracle9iから使えるようになったが、Oracle10g以降で構文が拡張されている。WHERE条件を指定できるようになったのは便利。
何より、Oracle9iではけっこうバグがあるらしい(苦笑)
Oracle10gではDELETE機能が加わったということなので、データの移動が出来るのかと期待したんだけど、そういう訳ではなく。
データ取得元テーブルのデータを消すのではなくて更新先テーブルから条件に応じて削除するものだった。
(ドキュメントのDELETEの条件に書かれている「ON句によって定義された結合に含まれない」というのが何を指すのかいまいち理解できないけど…)
…一定件数ずつコミットしつつ特定範囲のデータを全件移動させるには、どういう方法を採るのが一番いいのかなー…?
ちなみにMERGE内のINSERT・UPDATE実行時にトリガーも動くようだが、そこまで試してない。
DELETEはUPDATEされた行に対してだけ適用されるようなので、トリガーがどう動くのか、ちょっと興味はあるけれど(笑)
※コメント投稿者のブログIDはブログ作成者のみに通知されます