无法使用外部表加载数据

时间:2016-08-01 07:35:34

标签: oracle oracle11g sql-loader

我正在尝试从csv文件加载外部表中的数据。 以下是我的片段:

create table emp_ext
(
eid number,ename char(9)
)
organization external
(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY test
ACCESS PARAMETERS
       (
       RECORDS DELIMITED BY NEWLINE
       FIELDS TERMINATED BY ','
       (
       eid number,
       ename char(9)
       )

       )
       LOCATION('C:\Users\99002971\Desktop\empf.csv')
)

create directory test as 'C:\Users\99002971\Desktop'
grant read on directory test to matuat35 // granted using another user

当我从emp_ext中选择*时,我会收到以下错误:

ORA-29913:Error in executing ODCIEXTTABLEOPEN callout
ORA-29400:data cartridge error
KUP-00554:error encountered while parsing access parameters
KUP-01005:syntax error:found ""identifier:expecting one of :"binary_float,binary_double,comma,char,date,double"
KUP-01008:the bad identifier was double
KUP-01007:at line 4 column 12

请帮忙

1 个答案:

答案 0 :(得分:2)

datatype_spec section of the external table documenation表示加载程序驱动程序无法识别number。在您的代码中被视为标识符而不是数据类型,因此错误。

您可以使用oracle_numberunsigned integer,因为它可能始终是员工ID的正整数;或者保持无类型,并允许隐式转换为表列类型。

您的location也应该只在目录中指定文件名,而不是完整路径:

create table emp_ext
(
eid number,ename varchar2(15)
)
organization external
(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY test
ACCESS PARAMETERS
       (
       RECORDS DELIMITED BY NEWLINE
       FIELDS TERMINATED BY ','
       (
       eid unsigned integer external(9),
       ename char(15)
       )

       )
       LOCATION('empf.csv')
)

或者更简单,但依赖于隐式转换:

...
ACCESS PARAMETERS
       (
       RECORDS DELIMITED BY NEWLINE
       FIELDS TERMINATED BY ','
       (
       eid,
       ename char(15) rteim
       )

       )
       LOCATION('empf.csv')
)
相关问题