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 | |||