0

Oracle の外部テーブルに読み込まれる入力ファイルがいくつかあります。すべてのファイルのコンテンツに対していくつかのクエリを実行したいのですが、元の入力ファイルに基づいてデータをフィルタリングしたいクエリがいくつかあります。外部テーブルに対する select ステートメントでソース ファイルの名前にアクセスする方法や、ロケーション ソースを含む外部テーブルに列を作成する方法はありますか。

次に例を示します。

    CREATE TABLE MY_TABLE (
            first_name CHAR(100 BYTES)
            last_name CHAR(100 BYTES)
    )
    ORGANIZATION EXTERNAL
    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY TMP
    ACCESS PARAMETERS
    ( 
        RECORDS DELIMITED BY NEWLINE
        SKIP 1
        badfile       'my_table.bad'
        discardfile   'my_table.dsc'
        LOGFILE       'my_table.log'
        FIELDS terminated BY 0x'09' optionally enclosed BY '"' LRTRIM missing field   VALUES are NULL
        (
           first_name  char(100),
           last_name   
        )
    )
    LOCATION ( TMP:'file1.txt','file2.txt')
 )
 REJECT LIMIT 100;


 select distinct last_name 
 from MY_TABLE
 where location like 'file2.txt'  -- This is the part I don't know how to code

助言がありますか?

ファイル名を追加の列として入力ファイル自体に追加するオプションが常にあります。理想的には、この回避策を回避したいと思います。

4

1 に答える 1

2

ALL_EXTERNAL_LOCATIONSデータ ディクショナリ ビューには、外部テーブルの場所に関する情報が含まれていますまた、DBA_* および USER_* バージョン。

編集:(質問をよく読んでいただければ助かります。)

外部テーブルの場所を読み取るだけでなく、どの行がどのファイルから来たのかを知りたいのです。基本的に、次のことを行う必要があります。

  1. ファイルの場所をファイルの内容に追加して stdin に送信するシェル スクリプトを作成します。
  2. PREPROCESSOR ディレクティブを外部テーブル定義に追加して、スクリプトを実行します。
  3. 外部テーブルの定義を変更して、最初の手順で追加されたファイル名を表示する列を含めます。

これは、詳細に説明しているasktomの記事です

于 2013-02-09T01:43:27.847 に答える