アプリ版:「スタンプのみでお礼する」機能のリリースについて

あまりPL/SQLに関して知識がないので
可能なのかを教えていただきたいのですが、

例えば、
Oracleのテーブルデータ(例:メッセージテーブル)
をローカルの空のMDBファイルへ丸ごとコピー
といった処理をVBで行っているのですが、
毎回Insertを発行しているために
とても処理に時間がかかっています。
(もともとこれ自体無謀なんですが・・・)

そこでPL/SQLではバルク処理?といった
高速処理もあるようで、
このVBのかわりにPL/SQLで出来ないものだろうか・・・
と単純に思ったのですが、
PL/SQLでこういったコピー処理っていうのは
可能なんでしょうか??

ご存知の方、教えていただきたいです。
よろしくおねがいします。

A 回答 (5件)

ミドルウェアにoo4o(Oracle Objects for OLE)を選択すれば、バルク転送は可能です。


ですが、「テーブルのデータを一括して読む」用途にはバルク転送は不向きだと思われます。(oo4oヘルプにあるサンプルコードはまさにコレをやってたりするんですが…)

データを読み込む際の速度は
(非常に遅い)
SELECT文で1行ずつ取り込む

(ちょい遅い)
Accessのリンクテーブル経由でADOなどのレコードセット(カーソル)を使用する

(結構速い)
ADO等ののODBC Direct接続を使用する
oo4o等Oracleに直接接続するミドルウェアを使用する。

MDBに書き込む際の速度は
(非常に遅い)
INSERT文で1行ずつ書き込む

(遅い)
リンクテーブル経由でADOやDAOのレコードセットを使用して書き込む

(結構速い)
ADOやDAOのレコードセット経由で、ローカルのテーブルに書き込む(AddNewメソッド、Updateメソッドを使用)

(もうちょっとだけ速い)
DAOのTableDirect接続で、書き込む

↑のような感じだと思います。(接続時のパラメータ次第で書き込み/読み込みの速度は増減しますが)

お書きになった文章から判断するに、「毎回Insertを発行しているために」が恐らくボトルネックではないでしょうか。
もう少し高速な書き込み方法を検討されると、よい結果が得られるような気がします。
    • good
    • 0

たぶん、時間的な効率を優先するなら、


・オラクルでCSV出力
・ACCESSで、テキストインポート
を、自動化するのが良いかと。

もっとも、VBを使わず、ACCESS側で、"insert into ~ select ~"な手法に
変えるだけで、充分に速くなるような気がしますが。

なお、参考までに・・
PL/SQLでは、#1&#3で書かれているような方法の他に
COMオートメーションを使う方法もあります。(Windows限定)
いずれにせよ、効率はよろしくないと思います。
    • good
    • 0
この回答へのお礼

CSV出力方法も有効かもしれないですね。
COMオートメーションという手法も
調査してみます。
ありがとうございました。

お礼日時:2005/11/08 10:15

#1の人が回答されているのは



Oracle Generic Connectivity

の事だと思います。
異機種へのデータベースリンクを ODBC または、
OLE DB越しにマッピングするものです。

オラクルの「分散システム」辺りのマニュアルで
ご確認を。
(無ければOTNで落としましょう)

ただし、Accessが相手となるとかなり遅いと思います。
    • good
    • 0
この回答へのお礼

Accessだと遅いんですか。
「分散システム」ですね。もう少し調べてみます。
ありがとうございました。

お礼日時:2005/11/08 08:41

解決策が下の人と似ているのですが、MDB側で操作する方法でもよいのでしょうか?


1.該当のMDBにLinkTable関数を使用してOracleのテーブルをリンクする。
2.後はMDB内でInsert文を発行
もしくは
1.直接ODBC経由でインポートを発行。

こんな方法でも問題なければ、お試しください。
    • good
    • 0
この回答へのお礼

自動化できるのであればどんな方法でも
提案できると思います。
やはりリンクがカギになりそうですね。
ありがとうございました。

お礼日時:2005/11/08 08:39

 やり方は覚えていないが、Windowsであれば、Oracleから別のDBを(OLEDBで)見に行く方法があったはずだ。

データベースリンクのような感じで。
 その設定さえしてしまえば、後はOracleのinsert文でMDBにデータを流し込める。が、ひょっとしたらこれも内部では毎回Insertをしているのかも知れない。

 とりあえずデータベースリンクなどで検索するよろし。
    • good
    • 0
この回答へのお礼

データベースリンクというものですね。
勉強してみます。
ありがとうございました。

お礼日時:2005/11/08 08:35

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