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. 创建一个将文件位置添加到文件内容并将它们发送到标准输入的 shell 脚本。
  2. 将 PREPROCESSOR 指令添加到外部表定义以执行脚本。
  3. 更改外部表定义以包含一列以显示在第一步中附加的文件名。

是一篇asktom文章详细解释它。

于 2013-02-09T01:43:27.847 回答