こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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関数やループなどを使って効率的に行うやり方がわかりません。どなたか、ご教授ください。

投稿日時 - 2002-08-30 15:08:57

QNo.347146

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

下記ツールを使えば、ExcelからデータをOracleへ投入できます。
http://www.superdbtool.com
ExcelDBTool

投入する際に使ったInsert文は全部ログとして残っていますので、
数十万件の投入でも可能です。

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

ご参考まで。

投稿日時 - 2013-09-25 17:16:29

ANo.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;
/

実際試してないので、間違っているかもしれませんが。

投稿日時 - 2002-08-30 21:04:09

ANo.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文に埋め込んではいかがでしょうか。

投稿日時 - 2002-08-30 18:04:41

ANo.1

ORACLE使ったことなくて、自信がないのですが・・・

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

あいまいな回答で申し訳ありません

投稿日時 - 2002-08-30 17:45:37

あなたにオススメの質問