Oracle のマルチテーブル・インサート

最近は PostgreSQL の機能も充実してきましたが Oracle にはまだまだ独自の機能が残っています。

今回は、前回やったマルチテーブル・インサートについて。

次のように INSERT文をまとめることができます。

SQL> INSERT ALL
  2    INTO table1 (field1, field2) VALUES ('xxxxx1', 'xxxxxxxxx')
  3    INTO table1 (field1, field2) VALUES ('xxxxx2', 'xxxxxxxxx')
  4    INTO table1 (field1, field2) VALUES ('xxxxx3', 'xxxxxxxxx')
  5  SELECT * FROM DUAL;

まとめるだけでなく複数のテーブルに INSERT できます。

SQL> INSERT ALL
  2    INTO table1 (field1, field2) VALUES ('xxxxx1', 'xxxxxxxxx')
  3    INTO table2 (field1, field2) VALUES ('xxxxx2', 'xxxxxxxxx')
  4    INTO table3 (field1, field2) VALUES ('xxxxx3', 'xxxxxxxxx')
  5  SELECT * FROM DUAL;

文末の DUAL に気づいたでしょうか?

  5  SELECT * FROM DUAL;

ここにはテーブルや福問い合わせを指定することができます。

つまり 次のようなことができてしまうわけです。

SQL> INSERT ALL
  2    INTO table1 (field1, field2) VALUES (fieldA, fieldB)
  3    INTO table2 (field1, field2) VALUES (fieldA, fieldC)
  4    INTO table3 (field1, field2) VALUES (fieldA, fieldD)
  5  SELECT * FROM table4;

さらに条件も指定することができます。

SQL> INSERT ALL
  2    WHEN fieldB < 10 THEN
  3      INTO table1 (field1, field2) VALUES (fieldA, fieldB)
  4    WHEN fieldC < 10 THEN
  5      INTO table2 (field1, field2) VALUES (fieldA, fieldC)
  6    WHEN fieldD < 10 THEN
  7      INTO table3 (field1, field2) VALUES (fieldA, fieldD)
  8  SELECT * FROM table4;

やっぱり Oracle は恐ろしいですね。

Google サイト内検索

Amazonアソシエイト