PL/SQLでmdbファイルへの書き込みは可能?
- PL/SQLでmdb(Access)ファイルへの書き込みが可能かどうかを教えてください。
- VBでOracleのテーブルデータをローカルのMDBファイルへコピーする処理に時間がかかっています。PL/SQLで高速なバルク処理ができるのでしょうか?
- PL/SQLを使用してOracleのテーブルデータをMDBファイルにコピーする方法について教えてください。
- ベストアンサー
PL/SQLでmdb(Access)ファイルへの書き込みは可能?
あまりPL/SQLに関して知識がないので 可能なのかを教えていただきたいのですが、 例えば、 Oracleのテーブルデータ(例:メッセージテーブル) をローカルの空のMDBファイルへ丸ごとコピー といった処理をVBで行っているのですが、 毎回Insertを発行しているために とても処理に時間がかかっています。 (もともとこれ自体無謀なんですが・・・) そこでPL/SQLではバルク処理?といった 高速処理もあるようで、 このVBのかわりにPL/SQLで出来ないものだろうか・・・ と単純に思ったのですが、 PL/SQLでこういったコピー処理っていうのは 可能なんでしょうか?? ご存知の方、教えていただきたいです。 よろしくおねがいします。
- kei161220
- お礼率75% (9/12)
- Oracle
- 回答数5
- ありがとう数8
- みんなの回答 (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をしているのかも知れない。 とりあえずデータベースリンクなどで検索するよろし。
お礼
データベースリンクというものですね。 勉強してみます。 ありがとうございました。
関連するQ&A
- PL/SQLで、MDBファイル作成
お疲れ様です。 質問をお願い致します。 OS:WindowsXP DB:Oracle10g PL/SQLで、DBより対象データを取得し、MDBファイルの作成、書込み行いたいのですが、可能なのでしょうか。 ネットで調べたところ、MDBファイルに書き込みは可能と分かったのですが、 ファイルの作成の情報が無かったので、質問させて頂きました。 参考になるサイトなどがあれば教えて頂けますでしょうか? また、こちらでも重複して質問させて頂いております。 http://forums.oracle.com/forums/thread.jspa?threadID=2219258&tstart=0 どうぞ、宜しくお願い致します。
- ベストアンサー
- Oracle
- 異なるmdbファイルにテーブルをSQLでコピー
SELECT * into table1 from tabel2 のようにして、同じmdbの中でテーブルをコピーすることはできますが、 異なるmdbファイルにテーブルをSQLを使ってコピーすることはできるものですか。 #できないという回答もお待ちします。 #access2000
- ベストアンサー
- その他(データベース)
- PL/SQLでのSQL文法
こんにちは。教えてください。 PL/SQLを使うのが初めで戸惑っています。 まず、PROCEDUREで =========================== BEGIN SELECT NAME FROM TABLE1 WHERE NAME='tanaka'; END; / =========================== このように書いて実行させようとすると、「コンパイルエラー」 「INTO句はこのSELECT文に入ります」というエラーが出ます。 SQLの文法的には間違ってないと思うのですが、INTO句とはこれいかに?? ネットでPL/SQLで検索かけて調べたのですがあまりにも初歩すぎて わかりませんでした。 PL/SQLやORACLEのメーリングリストでお勧めがありましたら教えてください。 よろしくお願いいたします。
- ベストアンサー
- その他(データベース)
- PL/SQLのエラー処理について
PL/SQLを勉強し始めたのですが、テーブルを作成してから、データを流し込むという処理をしたいのですが、テーブルの作成に失敗しらたら、処理を終了させるという処理はできないのでしょうか? それとも、考え方が違うのでしょうか?アドバイスお願いします。 次のようにPL/SQLを作成しています。 例) declare curHandle1 INTEGER; begin curHandle1 := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(curHandle1, 'create table xxx as select * from xxx where ID=-1', DBMS_SQL.V7); DBMS_SQL.CLOSE_CURSOR(curHandle1); exception when OTHERS then エラーになったら、処理終了したい(次のブロックにいきたくない) end; declare begin insert into xxx NOLOGGING values (1,'test'); end; よろしくお願いします。
- ベストアンサー
- Oracle
- Accessデータを違うmdbにコピーしたい
VB2005で、mdbをデータベースにして開発しています。 aaa.mdbのテーブル1のデータをbbb.mdbのテーブル1に読み込ませたいと思っています。 bbb.mdbのテーブル1は、aaa.mdbのテーブル1よりフィールド数が多く、 該当する列にデータを読み込ませたいと思っています。 今まで、バックアップはaaa.mdbを丸ごとコピーして圧縮ファイルにしていました。復元の時は、解凍して上書きする、という手法をとっていました。 しかし、今回どうしてもテーブル1に列を追加しなくてはならず、aaa.mdbのバックアップデータをbbb.mdbに読み込ませて、VB2005のフォームに表示したいと考えております。 以上のような操作は可能でしょうか?可能でしたらその手法を是非教えてください。 また、データベースアプリを作成する上でアプリ完成後に、カスタマイズや計算方法の変更により列の追加が必要になる、いうことはまずいことでしょうか?前もって考えてフィールドを持っておくべきなのでしょうか?経験がないため、わかりません。この点についてもアドバイスがありましたら宜しくお願い致します。
- ベストアンサー
- その他(データベース)
- アクセスからオラクルへテーブルをエクスポートするVBAコードは?
バックアップとして、アクセスからオラクルへテーブルをエクスポートします。その際のアクセスVBAのコードがわかりません。 SQLで行おうとしたらフィールドが120ほどありコードが軽く千行を超えてしまったためあきらめました。 流れとしては、mdb内にオラクルテーブルをコピーして→mdbからオラクルへテーブルをエクスポートして→テーブルのリンクを削除する、と考えています。 また、もしSQLで簡潔に上記作業を行える書き方があるのなら、それも合わせて回答をいただけるととても助かります。 よろしくお願いいたします
- ベストアンサー
- その他(データベース)
- PL/SQLでインポート(IMP)をしたいのですが?
1.PL/SQLでテーブルのインポート(IMP)をしたいのですが どのような記述をすればよろしいでしょか? また、無理であればお、.NET VBでテーブルのインポート(IMP)をしたいのですが、どのような記述をすればよろしいでしょか? 2.上記の質問で、SQLLDRで行う場合はどうすればよいか? 大変申し訳ございませんが、よろしくお願い致します。
- ベストアンサー
- Oracle
- MDBファイル→ORACLEテーブル
いつもよく拝見させてもらってます。 今回初めて投稿させていただきますので何とぞ色々な面でご教授のほどよろしくお願いしますm(_ _)m 本題ですが、VB6を使いACCESSのMDBファイルをORACLEのテーブルにエクスポートするやり方を考えております。 Commandボタンを用意し、それをクリックしたらORACLEのテーブルにデータが入るというプログラムを作成しているのですが、ADOを使いMDBファイルのデータを落とす事まではできたのですが、ORACLEへの登録の仕方が分からないのでどなたかアドバイス又は参考となるサイト等ありましたらよろしくお願いします。 まだまだ初心者で分からない事だらけですので、何か他に情報が必要な際は、ご連絡ください。
- 締切済み
- Visual Basic
- PL/SQLからshellスクリプトの起動はできますか?
ORACLE9i(Solaris)で処理しているPL/SQLから同サーバ上のshellスクリプトを起動させることは可能でしょうか?可能な場合は、そのやり方を教えてください。
- 締切済み
- Oracle
- shからPL/SQLブロックを実行する方法
Solaris上でshスクリプト中からPL/SQLを記述したファイルを呼び出して、Oracleのテーブルに対して操作したいのですが、 test.shファイル #/bin/sh sqlplus userid/password@ddzk test.sqlファイル DECLARE … BEGIN INSERT INTO table VALUES( … ) END; / コマンドラインから $./test.sh を実行すると、 ./test.sh: sqlplus: 見つかりません。 と表示されます。 どなたかshスクリプトからPL/SQLで記述したファイルを実行する 方法をご存知の方、ご教示願います。
- ベストアンサー
- その他(プログラミング・開発)
お礼
CSV出力方法も有効かもしれないですね。 COMオートメーションという手法も 調査してみます。 ありがとうございました。