みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Oracleストアドプロシージャについて

現在、夜間バッチで海外FTPサーバーからCSVファイルをDWHサーバーに格納後、
同DWHサーバー内のOracleテーブルにInsertするという処理の開発をしているのですが、
CSVの取得はDOSバッチとTeratermのマクロで取得しようと思っています。
しかし、CSVファイルのInsert処理はPL/SQLで開発を行おうと考えています。
それは、Insert後にそのテーブルと別サーバーのOracleテーブルを使用してデータの加工を行い、
その結果をDWHテーブルにロードしなければいけないからです。
ちなみに、今まではVBしか触ったことしかなくPL/SQLやバッチの作成はは初めてです。
そこで質問なのですが、PL/SQLで他のサーバーのテーブルとリレーションは出来るのでしょうか?
(VBAでは1つのサーバーにしか同時接続できなかったため)
またその場合のフローチャートのイメージが出来ないのですが、箇条書き程度で結構ですので教えていただけないでしょうか?(どこでストアドプロシージャに処理が移行するのかなど....)
長い文章でわかりにくいと思いますが、識者の方がいれば教えていただければ幸いです。

投稿日時 - 2010-12-24 14:11:53

QNo.6404474

困ってます

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

> CSVの取得はDOSバッチとTeratermのマクロで取得しようと思っています。
windows標準添付のfpコマンドは転送エラーを拾えません。ftpgetとかPerlのNET::ftpかrubyのnet/ftpなら拾えた気がします。

> CSVファイルのInsert処理はPL/SQLで開発を行おうと考えています。
Sql*Loaderを使用しない理由が理解出来ません。Insert処理はSql*Loaderの方が圧倒的に高速です。特に全件置き換えの場合はDirectモードが使用可能です。

> PL/SQLで他のサーバーのテーブルとリレーション
「他のサーバーのテーブル」がOracleならデータベースリンクで参照が可能です。ただし、リモートテーブルとのJOINはINDEXを使用できません。パフォーマンス的にかなり苦しいことが予想されます。
REMOTEテーブルのデータ量が少なければHashJoinを利用できる可能性もありますが。
データベースリンクについてはマニュアルを参照してください。
http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/statements_5005.htm

投稿日時 - 2010-12-26 03:33:07

お礼

詳細な説明ありがとうございました。
リンク先も参考にさせていただきます。

投稿日時 - 2010-12-27 10:32:34

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

他のサーバのDBとの連携は「データベースリンク」を使用します。
「データベースリンク」と「シノニム」を組み合わせて表があたかも自サーバに存在するかのごとく
扱えます。

投稿日時 - 2010-12-24 14:25:08

お礼

参考にさせていただきます。
ありがとうございました。

投稿日時 - 2010-12-27 10:31:10

ANo.1

そもそも全体のシステム連携の設計が最初ではないでしょうか?
ストアドプロシージャ―の設計・構築はそれがきまってからではないですか?
DBリンクをはれば、他のサーバーのデータを参照できますが、
そもそもDBリンクを作成できるか?ODIなどを利用するかなどの検討が必要です。
またCSVファイルをテーブルへの取り込みは一般的にはSQLローダーを使うと思います。
そのあたりのアーキテクチャなどを考えてから実際のプログラム作成に入ると思います。

投稿日時 - 2010-12-24 14:20:48

お礼

なるほど、おおまかな流れはわかりました。
ありがとうございました。

投稿日時 - 2010-12-27 10:30:24

あなたにオススメの質問