ORA-29913:执行ODCIEXTTABLEOPEN标注时出错

时间:2018-05-22 19:06:03

标签: sql oracle plsql oracle11g ora-29913

我正在使用hr架构创建外部表但我收到错误

  

" ORA-29913:执行ODCIEXTTABLEOPEN标注ORA-29400时出错:   数据盒式磁带错误KUP-00554:解析访问时遇到错误   参数KUP-01005:语法错误:找到"缺少":期待以下之一:   "列,(" KUP-01007:第4行第3列   29913. 00000 - "执行%s标注错误"   *原因:执行指定的标注导致错误。   *操作:检查错误消息是否采取适当的措施。"

----------------我的代码-------------------

create directory ex_tab as 'C:\My Works\External Table';


create table strecords (
st_id number(4),
st_name varchar(10),
schl_name varchar(5),
st_city varchar(15),
st_year number(4)
)
ORGANIZATION EXTERNAL
(TYPE oracle_loader
 DEFAULT DIRECTORY ex_tab
 ACCESS PARAMETERS
 (
  RECORDS DELIMITED BY newline
  FIELDS TERMINATED BY ',' 
  REJECT ROWS WITH ALL NULL FIELDS
  MISSING FIELDS VALUES ARE NULL
  (
    st_id number(4),
    st_name char(10),
    schl_name char(5),
    st_city char(15),
    st_year number(4)
  )
 )
 LOCATION ('strecords.txt')
);

desc strecords;

select * from strecords;

这是我的代码,请检查并查看。

2 个答案:

答案 0 :(得分:2)

这里有几个问题。造成问题的直接原因是you have the clauses in the wrong order,但您还有MISSING FIELDS而不是MISSING FIELD

...
 ACCESS PARAMETERS
 (
  RECORDS DELIMITED BY newline
  FIELDS TERMINATED BY ',' 
  MISSING FIELD VALUES ARE NULL
  REJECT ROWS WITH ALL NULL FIELDS
  (
...

然后,您的field list contents对该声明的该部分无效data types;在这种情况下,您可以完全省略它,因为它们与表列定义匹配。

  

如果未指定字段列表,则假定数据文件中的字段与外部表中的字段的顺序相同。

所以你可以将它简化为:

create table strecords (
st_id number(4),
st_name varchar(10),
schl_name varchar(5),
st_city varchar(15),
st_year number(4)
)
ORGANIZATION EXTERNAL
(TYPE oracle_loader
 DEFAULT DIRECTORY ex_tab
 ACCESS PARAMETERS
 (
  RECORDS DELIMITED BY newline
  FIELDS TERMINATED BY ',' 
  MISSING FIELD VALUES ARE NULL
  REJECT ROWS WITH ALL NULL FIELDS
 )
 LOCATION ('strecords.txt')
);

答案 1 :(得分:1)

针对名为

的Oracle Bug需要进行一些操作

从外部表中选择返回错误ORA-29913 ORA-29400 KUP-554 KUP-1005(文档ID 302672.1)

创建外部表时,应按以下顺序指定访问参数:

  • 评论
  • 记录格式信息
  • 字段定义

以正确的顺序指定注释,记录格式信息和字段定义。即使在记录格式信息中,“由......分隔的记录”子句也应该出现在任何其他子句之前。

有关详细信息,请参阅the access_parameters clause