一度に複数レコードをINSERT
仕事でOracle触ってる。テストデータとして大量のレコードをINSERTしたかったので、
INSERT ALL INTO TABLE1 (FIELD1, FIELD2, FIELD3, ...) VALUES (VALUE11, VALUE12, VALUE13, ...) INTO TABLE1 (FIELD1, FIELD2, FIELD3, ...) VALUES (VALUE21, VALUE22, VALUE23, ...) INTO TABLE1 (FIELD1, FIELD2, FIELD3, ...) VALUES (VALUE31, VALUE32, VALUE33, ...) ... SELECT * FROM DUAL;
ってやってみたけど、レコードが多くなった場合(カラム数が数十、レコード数が数千件)にORA-24335のエラーが出た。次のようにしたら大丈夫だった。
INSERT INTO TABLE1 (FIELD1, FIELD2, FIELD3, ...) ( SELECT VALUE11, VALUE12, VALUE13, ... FROM DUAL UNION ALL SELECT VALUE21, VALUE22, VALUE23, ... FROM DUAL UNION ALL SELECT VALUE31, VALUE32, VALUE33, ... FROM DUAL UNION ALL ... )
解決方法として妥当なのか良くわからんけど、まぁいいや。