- ベストアンサー
PL/SQLでmdbファイルへの書き込みは可能?
- PL/SQLでmdb(Access)ファイルへの書き込みが可能かどうかを教えてください。
- VBでOracleのテーブルデータをローカルのMDBファイルへコピーする処理に時間がかかっています。PL/SQLで高速なバルク処理ができるのでしょうか?
- PL/SQLを使用してOracleのテーブルデータをMDBファイルにコピーする方法について教えてください。
- みんなの回答 (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を発行しているために」が恐らくボトルネックではないでしょうか。 もう少し高速な書き込み方法を検討されると、よい結果が得られるような気がします。
その他の回答 (4)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
たぶん、時間的な効率を優先するなら、 ・オラクルでCSV出力 ・ACCESSで、テキストインポート を、自動化するのが良いかと。 もっとも、VBを使わず、ACCESS側で、"insert into ~ select ~"な手法に 変えるだけで、充分に速くなるような気がしますが。 なお、参考までに・・ PL/SQLでは、#1&#3で書かれているような方法の他に COMオートメーションを使う方法もあります。(Windows限定) いずれにせよ、効率はよろしくないと思います。
- utakataXEX
- ベストアンサー率69% (711/1018)
#1の人が回答されているのは Oracle Generic Connectivity の事だと思います。 異機種へのデータベースリンクを ODBC または、 OLE DB越しにマッピングするものです。 オラクルの「分散システム」辺りのマニュアルで ご確認を。 (無ければOTNで落としましょう) ただし、Accessが相手となるとかなり遅いと思います。
お礼
Accessだと遅いんですか。 「分散システム」ですね。もう少し調べてみます。 ありがとうございました。
- kazuho_goo
- ベストアンサー率56% (34/60)
解決策が下の人と似ているのですが、MDB側で操作する方法でもよいのでしょうか? 1.該当のMDBにLinkTable関数を使用してOracleのテーブルをリンクする。 2.後はMDB内でInsert文を発行 もしくは 1.直接ODBC経由でインポートを発行。 こんな方法でも問題なければ、お試しください。
お礼
自動化できるのであればどんな方法でも 提案できると思います。 やはりリンクがカギになりそうですね。 ありがとうございました。
- anmochi
- ベストアンサー率65% (1332/2045)
やり方は覚えていないが、Windowsであれば、Oracleから別のDBを(OLEDBで)見に行く方法があったはずだ。データベースリンクのような感じで。 その設定さえしてしまえば、後はOracleのinsert文でMDBにデータを流し込める。が、ひょっとしたらこれも内部では毎回Insertをしているのかも知れない。 とりあえずデータベースリンクなどで検索するよろし。
お礼
データベースリンクというものですね。 勉強してみます。 ありがとうございました。
お礼
CSV出力方法も有効かもしれないですね。 COMオートメーションという手法も 調査してみます。 ありがとうございました。