Oracle で複数レコードを一気に INSERT する記法を毎回忘れる
INSERT ALL
の書き方を毎回忘れるのでメモ。
こう書く。
INSERT ALL
INTO tbl_hoge (id, name, age) VALUES (1, 'Michael', 55)
INTO tbl_hoge (id, name, age) VALUES (2, 'Christopher', 77)
INTO tbl_hoge (id, name, age) VALUES (3, 'Lea', 55)
INTO tbl_hoge (id, name, age) VALUES (4, 'Thomas', 57)
INTO tbl_hoge (id, name, age) VALUES (5, 'Claudia', 49)
SELECT * FROM DUAL;
INSERT ALL INTO
だ。末尾の SELECT * FROM DUAL
は必須。SELECT INSERT
のテイと見せかけるためだ。
テーブル定義どおりに全カラムに値を入れるのであれば、カラム名の記述を省略して
INSERT ALL
INTO tbl_hoge VALUES (1, 'Michael', 55)
INTO tbl_hoge VALUES (2, 'Christopher', 77)
INTO tbl_hoge VALUES (3, 'Lea', 55)
INTO tbl_hoge VALUES (4, 'Thomas', 57)
INTO tbl_hoge VALUES (5, 'Claudia', 49)
SELECT * FROM DUAL;
と書ける。
INTO (table name)
は省略したり1回にまとめたりはできない代わりに、以下のように1回のクエリで複数のテーブルに INSERT することもできる。
INSERT ALL
INTO tbl_hoge (id, name, age) VALUES (1, 'Michael', 55)
INTO tbl_movie (year, name) VALUES (1985, 'Back To The Future')
SELECT * FROM DUAL;
最近 Oracle ばっか触ってるけど、MySQL とかはこう書ける。
INSERT INTO tbl_hoge (id, name, age) VALUES
(1, 'Michael', 55),
(2, 'Christopher', 77),
(3, 'Lea', 55),
(4, 'Thomas', 57),
(5, 'Claudia', 49);