You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用HR schema创建Oracle外部表时遇ORA-29913错误求排查

解决Oracle外部表创建时的ORA-29913/KUP语法错误

从你给出的错误栈(KUP-00554、KUP-01005)可以明确看到,核心问题是外部表访问参数的语法顺序出错了:MISSING FIELDS VALUES ARE NULL子句的位置不符合Oracle Loader的语法规范,解析器在该位置期望看到字段定义或左括号,却遇到了MISSING关键字。

错误原因分析

在Oracle外部表的ACCESS PARAMETERS中,MISSING FIELDS VALUES ARE NULL是FIELDS子句的可选属性,必须紧跟在FIELDS TERMINATED BY这类字段分隔符定义之后,而不能放在REJECT ROWS WITH ALL NULL FIELDS之后、字段列表之前。你的代码把它放在了错误的层级,导致解析失败。

修正后的创建代码

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 ','
 MISSING FIELDS VALUES ARE NULL  -- 调整到FIELDS子句内,紧跟分隔符定义
 REJECT ROWS WITH ALL NULL FIELDS
 (
 st_id number(4),
 st_name char(10),
 schl_name char(5),
 st_city char(15),
 st_year number(4)
 )
 )
 LOCATION ('strecords.txt')
);

额外注意事项

  • 确保Oracle数据库对应的操作系统用户(Windows下通常是OracleService<你的SID>用户)拥有对C:\My Works\External Table目录的读写权限,否则即使语法正确,后续查询也可能出现权限相关的错误。
  • 验证strecords.txt文件的格式是否符合定义:每行记录用逗号分隔字段,换行符作为记录分隔符,字段数量和表结构匹配。

执行修正后的代码后,再运行desc strecords;和select * from strecords;应该就能正常工作了。

内容的提问来源于stack exchange,提问作者Aditya Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:32:08