尝试从外部表中选择时出错

时间:2016-06-03 09:44:01

标签: oracle external-tables

我在尝试select * from ext_poc

时遇到以下错误
  

ORA-29913:执行ODCIEXTTABLEOPEN标注时出错   ORA-29400:数据盒式磁带错误   KUP-00554:解析访问参数时遇到错误   KUP-01005:语法错误:找到“标识符”:期望以下之一:“binary_double,binary_float,逗号,字符,日期,defaultif,decimal,double,float,integer,(,no,nullif,oracle_date,oracle_number,position,raw ,recnum,),unsigned,varrawc,varchar,varraw,varcharc,zoned“   KUP-01008:错误的标识符是:varchar2   KUP-01007:第4栏第10栏   29913. 00000 - “执行%s标注时出错”   *原因:执行指定的标注导致错误。   *操作:检查错误消息是否采取适当的措施。

以下是表格的ddl

CREATE TABLE "JDASTG"."EXT_POC" 
(   "ID" varchar2(100), 
"NAME"   varchar2(100), 
"DOB"    varchar2(100)
) 

ORGANIZATION EXTERNAL 
( TYPE ORACLE_LOADER
  DEFAULT DIRECTORY "SCPO_EXT_DATA"
  ACCESS PARAMETERS
  ( RECORDS DELIMITED BY NEWLINE    
  FIELDS TERMINATED BY ','    
  MISSING FIELD VALUES ARE NULL               
  (id      varchar2(100),    
  name     varchar2(100),     
  dob      varchar2(100)                
  )        
)
  LOCATION
   ( 'xyz_aldrin.csv'
   )
);

PS: 但是,如果varchar2(100)更改为char(100)

,则不会发生此错误
MISSING FIELD VALUES ARE NULL               
(id      char(100),    
name    char(100),     
dob     char(100)                
)   

1 个答案:

答案 0 :(得分:4)

区分表中指定的oracle内部数据类型和外部表(sqlldr的控制文件)的访问参数中指定的外部数据类型非常重要。请记住,再次阅读manual。它应该变得清晰。 SQL加载器中允许使用CHAR,而VARCHAR2不是