• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PL/SQLでmdb(Access)ファイルへの書き込みは可能?)

PL/SQLでmdbファイルへの書き込みは可能?

このQ&Aのポイント
  • PL/SQLでmdb(Access)ファイルへの書き込みが可能かどうかを教えてください。
  • VBでOracleのテーブルデータをローカルのMDBファイルへコピーする処理に時間がかかっています。PL/SQLで高速なバルク処理ができるのでしょうか?
  • PL/SQLを使用してOracleのテーブルデータをMDBファイルにコピーする方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.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)

回答No.4

たぶん、時間的な効率を優先するなら、 ・オラクルでCSV出力 ・ACCESSで、テキストインポート を、自動化するのが良いかと。 もっとも、VBを使わず、ACCESS側で、"insert into ~ select ~"な手法に 変えるだけで、充分に速くなるような気がしますが。 なお、参考までに・・ PL/SQLでは、#1&#3で書かれているような方法の他に COMオートメーションを使う方法もあります。(Windows限定) いずれにせよ、効率はよろしくないと思います。

kei161220
質問者

お礼

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

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.3

#1の人が回答されているのは Oracle Generic Connectivity の事だと思います。 異機種へのデータベースリンクを ODBC または、 OLE DB越しにマッピングするものです。 オラクルの「分散システム」辺りのマニュアルで ご確認を。 (無ければOTNで落としましょう) ただし、Accessが相手となるとかなり遅いと思います。

kei161220
質問者

お礼

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

回答No.2

解決策が下の人と似ているのですが、MDB側で操作する方法でもよいのでしょうか? 1.該当のMDBにLinkTable関数を使用してOracleのテーブルをリンクする。 2.後はMDB内でInsert文を発行 もしくは 1.直接ODBC経由でインポートを発行。 こんな方法でも問題なければ、お試しください。

kei161220
質問者

お礼

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

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 やり方は覚えていないが、Windowsであれば、Oracleから別のDBを(OLEDBで)見に行く方法があったはずだ。データベースリンクのような感じで。  その設定さえしてしまえば、後はOracleのinsert文でMDBにデータを流し込める。が、ひょっとしたらこれも内部では毎回Insertをしているのかも知れない。  とりあえずデータベースリンクなどで検索するよろし。

kei161220
質問者

お礼

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

関連するQ&A