最近は 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 は恐ろしいですね。