【SQL】SELECT * FROM DUALで一括INSERTする
- abesiusg
- 2023年7月24日
- 読了時間: 2分
現在進行中のプロジェクトで過去に使用されたINSERT文を見ていたら
初見の構文があったので書き留める
結論
デュアルテーブルを介することで一括INSERTを実現する
実装
環境:oracle12
INSERTALL
INTO CUSTOMER (ID,NAME,ADDRESS) VALUES ('001','SAZAE','Tokyo')
INTO CUSTOMER (ID,NAME,ADDRESS) VALUES ('002','IKURA','Tokyo')
INTO CUSTOMER (ID,NAME,ADDRESS) VALUES ('003','NAMIHEI','Tokyo')
INTO CUSTOMER (ID,NAME,ADDRESS) VALUES ('004','FUNE','Tokyo')
SELECT*FEOMDUAL;COMMIT;
SELECT * FEOM DUAL;を抜くと構文エラーが出た
一括INSERTしたものをダミーデータに持っておいてコミットする
というような感じだろうか、、、?
一旦実装方法のみ書き記しておく
oracleリファレンス
oracleのリファレンスでは下記のように記載されている。
DUALは、データ・ディクショナリとともにOracle Databaseによって自動的に作成された表です。 DUALは、ユーザーSYSのスキーマにありますが、すべてのユーザーがDUALという名前でアクセスすることができます。 VARCHAR2(1)として定義されているDUMMY列を持ち、X値を持つ行を含みます。 DUAL表から選択することは、定数式をSELECT文で計算する場合に便利です。 DUALには行が1つしかないため、定数が返されるのは1回のみです。 一方で、任意の表から定数、疑似列または式を選択できますが、値は表の行の数のみ戻されます。 DUALから定数値を選択する例は、「SQLファンクション」を参照してください。 Oracle® Database SQL言語リファレンス
よく分からないがダミーのテーブルで、 SELECTするとVARCHAR2(1)を返すということのようだ。
今後の調査課題
下記を調査し、更新予定とする
oracle以外のDBも同様の構文があるのか
なぜ一括INSERTはこんなことをしなければならないのか
他の方法があるのか