- ベストアンサー
DBからファイルを参照
たとえば、サーバ上に名前が十数個書かれた一つのファイルが存在しているとします。 その情報を、同サーバにあるDB(Oracle)から参照することは可能でしょうか? やりたいことは、SQLのSELECT文で、「そのファイルを参照してその名前をWHERE句で引数として、結果を出力させる」といった感じです。 「select from * from 名簿 WHERE "サーバ上にあるファイルを参照してそこにある情報(名前)" 」 このような形です。。。不可能そうだと思いつつ、聞いてみます。 わかりづらくて申し訳ありませんが、わかる方いらっしゃいましたら よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
OracleにはSQL LoaderやDataPumpといった主にテキストファイルをフィールドに整形してテーブルに取り込むためのツールが存在します。 この機能を活用して実際にOracleのデータベース外にあるファイルをあたかもOracleの実テーブルであるかのように使えるようにしたのが外部表です。 質問者さんの書かれた「名前が十数個書かれた一つのファイル」に対して名前(たとえばEXTTBL)がついて、「SELECT * FROM EXTTBL」のSQL文が実行できるのであれば、そのファイルの中に書かれた名前を抽出条件に使うことができますよね? >SELECT * FROM 名簿 >WHERE ID IN (SELECT ID FROM 外部表) については、キー項目が何かを書いておられなかったので、仮にそれを「ID」として、サンプルのSQL文を書いただけです。 外部表に含まれるIDのデータを名簿から抽出するという普通のSQLですよ。 頭で考えてイメージできない場合は、一度やってみてください。 (SYSDBAの権限があるということですよね) SQL> CREATE DIRECTORY extdata AS 'C:\(参照したいファイルのパス)'; SQL> CREATE TABLE EXTTBL SQL> (ID CHAR(100)) SQL> ORGANIZATION EXTERNAL( SQL> TYPE ORACLE_LOADER SQL> DEFAULT DIRECTORY extdata SQL> ACCESS PARAMETERS SQL> (RECORDS DELIMITED BY NEWLINE SQL> FIELDS (ID CHAR(100))) SQL> LOCATION '(ファイル名)' SQL> ); こちらも参考に http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19211-01/et_concepts.html なお、バージョンが全く書かれていませんので、今どきだし9i以上ですよねという大前提で書いています。
その他の回答 (1)
- jamshid6
- ベストアンサー率88% (591/669)
外部表を作ればできると思いますが、作成権限はありますか? ・Directoryを作成する ・上記Direcotoryを使って外部表を作成する あとは、 SELECT * FROM 名簿 WHERE ID IN (SELECT ID FROM 外部表)
補足
ご回答ありがとうございます。 もう一点質問させてください。 外部表について調べてみました。 ファイルシステム上のデータを表のデータとすることができる、 とありましたが、いまいち意味がつかめませんでした。。。 表のデータとすることでなぜ可能となるのでしょうか? また、WHERE ID IN (SELECT ID FROM 外部表)の意味も 合わせて教えていただけたらと思います。 (権限はあります。) よろしくお願いいたします。
お礼
jamshid6さん 詳しいご回答ありがとうございます!! 外部表について理解することができました。 早速試してみます。 本当にありがとうございました!!