top of page

【SQL】SELECT * FROM DUALで一括INSERTする

  • 執筆者の写真: abesiusg
    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はこんなことをしなければならないのか

  • 他の方法があるのか

どうしても​強くなりたいSEの覚書き

  • alt.text.label.Twitter

©2023 栞の雑記

bottom of page