• 締切済み

OracleでINSERT文のループ

INSERT文で何万件ものデータをテーブルに挿入したいのですが、 SUBSTRBまたはSUBSTR関数で何バイト分あるいは何文字分抽出して その部分の値をインクリメントさせる記述のしかたがわかりません。 INSERT INTO aaa (ID,YEAR,CLS,NO,THING,CD,LAND,USER,GROUP) VALUES ('30000003000','2000','2','85000','001','55555','10','test','1'); INSERT INTO aaa (ID,YEAR,CLS,NO,THING,CD,LAND,USER,GROUP) VALUES ('30000003001','2000','2','85001','001','55555','10','test','1'); INSERT INTO aaa (ID,YEAR,CLS,NO,THING,CD,LAND,USER,GROUP) VALUES ('30000003002','2000','2','85002','001','55555','10','test','1'); INSERT INTO aaa (ID,YEAR,CLS,NO,THING,CD,LAND,USER,GROUP) VALUES ('30000003003','2000','2','85003','001','55555','10','test','1'); ・ ・ ・ と、いう感じで、IDとNOのみ、値をインクリメントさせて大量のデータを 挿入したいのですが、SUBSTRB関数やループなどを使って効率的に行うやり方がわかりません。どなたか、ご教授ください。

みんなの回答

  • letsdb2
  • ベストアンサー率0% (0/0)
回答No.4

下記ツールを使えば、ExcelからデータをOracleへ投入できます。 http://www.superdbtool.com ExcelDBTool 投入する際に使ったInsert文は全部ログとして残っていますので、 数十万件の投入でも可能です。 ExcelDBToolで1つのテーブルが出来ましたら、同じ列名のほかのテーブルにコピーできます。 また、Excelに線を引いて、引いた線でデータの作成もできます。 下記のダミーデータ作成もできます。 日付, 時間, タイムスタンプ, 都道府県, E-Mail, URL, 郵便番号, 携帯, 苗字のみ, 氏名, ふりがな, 性別, 年齢, 血液型, 固定電話, 婚姻, 固定値, 国籍, 国籍英語, 国籍英語略, 企業名, 住所, 住所ふりがな, 半角英字, 市区, 町村, 最寄駅, 最寄駅ふりがな, 路線, 銀行コード, 銀行名, 銀行カタカナ, 支店コード, 支店名, 支店カタカナ, 大学名, 業種大分類, 業種大分類名称, 業種中分類, 業種中分類名称, 業種小分類, 業種小分類名称, 職種大分類, 職種大分類名称, 職種中分類, 職種中分類名称, 職種小分類, 職種小分類名称, 数値連番, 整数・小数点数, 英数混在, 文字列+連番, 文字列+全角連番, 全角漢字, ひらがな, 全角カタカナ, 半角カタカナ, 全角英数, 全角数値, 全角英字, 全半混在, 特殊文字 ご参考まで。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

サーバー側で、PL/SQLを使ってやるとか: DECLARE v_id NUMBER := 30000003000; v_no NUMBER := 85000; v_cnt PLS_INTEGER; BEGIN FOR v_cnt IN 1 .. 10000 LOOP INSERT INTO aaa ( ID,YEAR,CLS,NO,THING,CD,LAND,USER,GROUP ) VALUES ( TO_CHAR( v_id, '99999999999' ), '2000','2', TO_CHAR( v_no, '99999' ), '001','55555','10','test','1' ); v_id := v_id + 1; v_no := v_no + 1; END LOOP; COMMIT; END; / 実際試してないので、間違っているかもしれませんが。

  • mantaro1
  • ベストアンサー率48% (19/39)
回答No.2

Oracleなら連番を振るときはシーケンスを使います。 Create文は以下の通り。 CREATE SEQUENCE seqID INCREMENT BY 1 START WITH 1 MAXVALUE 100000 NOMINVALUE CYCLE NOORDER CACHE 20 / で、取得するときはNextValを使用します。 SELECT seqID.NEXTVAL FROM DUAL これを副問合せでInsert文に埋め込んではいかがでしょうか。

  • ORCA_H
  • ベストアンサー率35% (11/31)
回答No.1

ORACLE使ったことなくて、自信がないのですが・・・ ExcelとかでCSVファイルを作って読み込んではダメですかね? やりたいことの主旨と違ってしまったらごめんなさい。 SQLServerの時テストデータをそんな風に作って読み込みをしました。 (フィルで連続データの作成) あいまいな回答で申し訳ありません

関連するQ&A