6691 マルチテーブルインサート はくぶん 2015-06-17 03:21:43
マージテーブル関連を色々調べていると、マルチテーブルインサートという技術を紹介しているサイトに出くわした。

普通SQLのINSERT構文は、一つのテーブルに対してしか発行できないのだが、複数のテーブルに対して同時にインサートを発行する構文があるようだ。
ちょうどそんな構文が欲しいと思っていたところなので、早速内容を詳しく読んでみると、残念なことにOracleでしか使えない構文だということが分かった。

しかし、せっかく調べたので、その構文を掲載しておく。

INSERT ALL
 INTO テーブル1 (カラム1, カラム2) values (値1, 値2)
 INTO テーブル2 (カラム1, カラム2) values (値3, 値4)
SELECT * FROM dual;

こんな感じの構文なんだが、INSERT構文なのに最後にSELECT文がある。
なぜSELECT文が必要なのか分からない。
構文を見ると、何度も発行しなきゃならないINSERT構文を、まとめて1回で発行しているに過ぎない。
普通ならループ構文を使って処理するのだが、と筆者が言っている通り、ループで処理する内容を、一つの構文内に並べて書いたのが、このマルチテーブルインサート構文だと言えよう。
ループが大量に発生するような処理でもなければ、ループを数回回そうと、この構文で一度にINSERTしようと、パフォーマンス的にはそれ程の違いはないかもしれない。

まあ、いずれにせよ、Oracleでなければ使えない構文。
俺の場合は、普通にループを回して処理するしかないみたいだ。
メッセージ文字数:662/681