プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。

セレクトした結果(100000件)を一件ずつ違うテーブルにインサートする処理を行っているのですが、セレクトしたデータをMoveNextしていくとだんだん遅くなっていくような感じがします。MoveNextとはどのような処理なのでしょう
か?

またこの方法以外にSelectしたものを一軒ずつInsertするよい(早い)方法があれば教えてください。

Set oraDynaset = DATABASE.oraDynaset(セレクト文, 0&)

Do Until oraDynaset.EOF

insert処理...

oraDynaset.MoveNext
Loop

A 回答 (5件)

ORADYN_READONLYとORADYN_NO_REFETCHを一緒に指定してみてはどうですか?

    • good
    • 0
この回答へのお礼

ありがとうございました、

いっしょに設定する方法を試したのですが
、効果はありませんでした。

とりあえず、ストアドプロシジャで対応する事にしました

お礼日時:2002/07/29 22:26

Oracle Clientを普通にインストールするとoo4oのヘルプも一緒にインストールされているはずなんですけど。



CreateDynasetメソッドや、OpenDatabaseメソッドの箇所をどうぞ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
VBのヘルプを見てました(笑)

dbcreatedynaset(sql, 8&)
を指定したのですが、スピードは変わりませんでした。

お礼日時:2002/07/26 16:30

>ただ、セレクトしたデータを加工してインサートしたいと


>考えております。

どのような加工でしょう?
どうしてもSQLで出来ない加工ですか?
速度的には雲泥の差になるかもしれませんよ。


あと、SQLで出来ないとしたときのアドバイスを。
Dynasetの作成方法なんですが、読み込み専用で、前方に戻れないようなオプションをつけて作成してください。

MoveNextで行われるのはフェッチ処理です。
レコード件数が多くなると、前方に戻れるカーソル(Dynaset)ではバッファに内容を格納していくので処理が遅くなります。

この回答への補足

ご回答ありがとうございます

読み込み専用オプションとはどのように設定するのでしょうか?

参考になるようなホームページ等ご存知内でしょうか?
なにぶんVB初心者なのでどこをどう調べてよいかわからず
困っています。

よろしくお願いします。

補足日時:2002/07/26 12:57
    • good
    • 0

DAOを使用されていますか?



もしDAO使用でデータがJETであれば、INSERT分を発行するより、
ADDNEW/UPDATEにてテーブルに追加したほうが、
INSERT文発行より約4倍近くスピードが違うそうです。
特に更新明細が多ければ多いほど、速度差は大きくなります。

MOVENEXTで処理が遅くなっているというよりは、
20,000件近いデータの更新処理が遅い原因かと思われますので、
この更新方法をお勧めしたいです。

ADDNEW、UPDATEはDAOのヘルプに載ってます。参考になすってください。

この回答への補足

oo4oにて処理を行っています

UPDATEにてテーブルに追加とは、
SQL文のUPDATEのことでしょうか?

ADDNEWとはどのようなSQL文なのでしょうか?


よろしくお願いします。

補足日時:2002/07/25 20:20
    • good
    • 0

>またこの方法以外にSelectしたものを一軒ずつInsertするよい(早い)方法があれば教えてください。



insert先のテーブルの分だけ

insert into インサート先A select F1,F2 from 元テーブル名 where インサート先Aに入れるレコードの抽出条件

という感じのinsert文を使って入れるべきでしょう。

この回答への補足

ご回答ありがとうございます。
ただ、セレクトしたデータを加工してインサートしたいと
考えております。

Do Until oraDynaset.EOF
データの加工
加工したデータをinsert処理...

oraDynaset.MoveNext

ですのでInsert Into table Select...
で行う手段は断念したのです。

今現状で18,000件のデータをセレクトして一軒ずつ加工して一軒ずつInsertする方法ですと処理が終わらない状況です(泣)

補足日時:2002/07/25 18:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!