
あまりPL/SQLに関して知識がないので
可能なのかを教えていただきたいのですが、
例えば、
Oracleのテーブルデータ(例:メッセージテーブル)
をローカルの空のMDBファイルへ丸ごとコピー
といった処理をVBで行っているのですが、
毎回Insertを発行しているために
とても処理に時間がかかっています。
(もともとこれ自体無謀なんですが・・・)
そこでPL/SQLではバルク処理?といった
高速処理もあるようで、
このVBのかわりにPL/SQLで出来ないものだろうか・・・
と単純に思ったのですが、
PL/SQLでこういったコピー処理っていうのは
可能なんでしょうか??
ご存知の方、教えていただきたいです。
よろしくおねがいします。
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を発行しているために」が恐らくボトルネックではないでしょうか。
もう少し高速な書き込み方法を検討されると、よい結果が得られるような気がします。
No.4
- 回答日時:
たぶん、時間的な効率を優先するなら、
・オラクルでCSV出力
・ACCESSで、テキストインポート
を、自動化するのが良いかと。
もっとも、VBを使わず、ACCESS側で、"insert into ~ select ~"な手法に
変えるだけで、充分に速くなるような気がしますが。
なお、参考までに・・
PL/SQLでは、#1&#3で書かれているような方法の他に
COMオートメーションを使う方法もあります。(Windows限定)
いずれにせよ、効率はよろしくないと思います。
No.3
- 回答日時:
#1の人が回答されているのは
Oracle Generic Connectivity
の事だと思います。
異機種へのデータベースリンクを ODBC または、
OLE DB越しにマッピングするものです。
オラクルの「分散システム」辺りのマニュアルで
ご確認を。
(無ければOTNで落としましょう)
ただし、Accessが相手となるとかなり遅いと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- IT・エンジニアリング 帳票出力を行う単体テストのテストデータが作成できません 2 2023/08/26 21:25
- システム 帳票出力を行う単体テストのテストデータが作成できません 2 2023/08/26 21:26
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
- Excel(エクセル) Excel同士のデータの突合 3 2023/08/07 16:34
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- JavaScript Typescript が必要な理由 1 2023/01/07 11:45
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- その他(ブラウザ) python から COBOL を呼び出すことは可能でしょうか。 1 2023/04/21 21:03
- MySQL #1062 - '0' は索引 'PRIMARY' で重複しています。とでています。 1 2023/01/01 06:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
accessでイベントを中止するよ...
-
object browser で処理を中断す...
-
年度毎にシーケンスの初期化?
-
PL/SQLでmdb(Access)ファイルへ...
-
ActiveX DLLでのオラクルのトラ...
-
データを削除しても表領域の使...
-
Viewにインデックスは張れ...
-
ORA-00959: 表領域'****'は...
-
SQL*Loaderで、データを加工し...
-
Data Pump で大量データインポ...
-
CLOB型へのINSERT
-
ACCESS 複数テーブル・複数フィ...
-
カラムの存在チェック
-
viewのバックアップ
-
検索結果の列数を動的に変更したい
-
SQLでスキーマ名(所有者名)の...
-
グループの数を取得したい
-
select insert 句
-
datapumpの実行方法について
-
dba_extentsの考え方について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DELETE文でFROM句を省略した場合
-
RDBのテーブル種類の違い
-
object browser で処理を中断す...
-
同じSELECT文同士でのデ...
-
accessでイベントを中止するよ...
-
他の処理でselectさせないよう...
-
[性能改善]AccessのDBに大量の...
-
トランザクションの考え方の疑問点
-
年度毎にシーケンスの初期化?
-
PL/SQLでmdb(Access)ファイルへ...
-
PL/SQLの平行処理について
-
チューニング対象のSQLの見つけ...
-
ActiveX DLLでのオラクルのトラ...
-
統計情報の取得=コミットですか?
-
UPDATE がうまくいかない
-
PL/SQLでの処理について
-
処理速度の見積もり時間について。
-
C#でトランザクション開始後参...
-
DBリンクエラーについて
-
1件あたりの処理時間を検討する...
おすすめ情報