首页 文章

Oracle 11G,外部表和.csv文件

提问于
浏览
1

在Oracle 11g中遇到外部表的问题 . 我目前正在使用DB Artisan来运行我的查询 . CREATE和ORGANIZATION代码成功执行,但是当我运行select语句时,我收到错误 . 我的.csv文件的设置方式与EXTERNAL_TABLE的布局相同, Headers 也是如此 .

CREATE TABLE EXTERNAL_TABLE
(
    COL1 NUMBER(14),
     COL2 VARCHAR2(10),
     COL3 VARCHAR2(3),
     COL4 VARCHAR2(3),
     COL4 VARCHAR2(4),
     COL6 NUMBER(4,0),
     COL7 VARCHAR2(20),
     COL8 VARCHAR2(20),
     COL9 NUMBER(3)    
)
ORGANIZATION EXTERNAL 
(
    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY FOLDER1
    ACCESS PARAMETERS
    (   
        RECORDS DELIMITED BY NEWLINE
        FIELDS TERMINATED BY ','
        MISSING FIELD VALUES ARE NULL
        (COL1 CHAR(14),
    COL2 CHAR(10),
    COL3 CHAR(3),
    COL4 CHAR(3),
    COL4 CHAR(4),
    COL6 CHAR(4),
    COL7 CHAR(20),
    COL8 CHAR(20),
    COL9 CHAR(3)                      
                )
    )
    LOCATION ('FILENAME.csv') --Name of flat file.
)
REJECT LIMIT 0;

运行:

SELECT * FROM EXTERNAL_TABLE

给出了这个错误:

ORA-29913:error in executing ODCIEXTTABLEOPEN callout
ORA-29400:data cartridge error
KUP-04027:file name check failed: A:\job\job\FILENAME_1234_5566.log

3 回答

  • 0

    KUP-04027:file name check failed 表示文件位置无效 .

    所以,鉴于此文件名...

    A:\job\job\FILENAME_1234_5566.log
    

    ......出现了几个想法:

    • 正如@jonearles指出的那样,A:传统上是为软盘驱动器保留的 . 您的数据库服务器(即托管数据库的计算机)是否具有A:驱动器?如果不是,你应该纠正 .

    • 该驱动器是否真的有一个名为 job 的根目录,其子目录名为 job ?或者这是你的DIRECTORY对象 folder1 路径中的拼写错误?

    • 此外,您的示例代码将文件名称为'FILENAME.csv' . 显然,这与错误消息中的文件名不匹配 . 您在外部表定义中为文件名实际指定了什么?

    • KUP-04027 的确切原因是特定于操作系统的,因为文件命名约定是每个操作系统特有的 . 我的猜测是你的数据库确实存在于远程Unix服务器上,但是你需要工作:你需要将文件上传到数据库服务器 .

  • 4

    好的,很久以前就问了这个问题,但我最近自己也遇到过这个问题 .

    问题是数据Oracle外部表不完全支持引用远程网络位置的硬链接 .
    我做的工作是创建一个专门使用UNC路径的目录对象(如'\remoteserver\proxy'指向远程网络位置 . 这对我来说神奇地起作用 .

  • 1

    如果您在RAC中并且文件位于ACFS内部,则使用:

    DISABLE_DIRECTORY_LINK_CHECK
    

    修复它!

    https://www.realdbamagic.com/using-external-table-windows-rac-acfs/

相关问题