SQL*Loader加载XML数据报SQL*Loader-416错误,请求排查解决
解决SQLLoader加载XML数据时的SQLLoader-416错误
错误原因
SQL*Loader-416错误的核心是:表FOP2中XML_字段的SDF子句引用了一个未在控制文件中定义的字段。也就是说你的loader.ctl里,指定XML_加载来源的SDF参数对应的字段名,要么没在字段列表里声明,要么拼写/大小写不匹配。
正确配置示例
针对你创建的CREATE TABLE FOP2 (XML_ XMLTYPE);表结构,以下两种配置完全匹配官方文档逻辑,可直接使用:
场景1:从文件名列表批量加载XML文件
如果你的filenames.dat是每行存储一个XML文件路径的列表,loader.ctl需这样写:
LOAD DATA INFILE 'filenames.dat' TRUNCATE INTO TABLE FOP2 FIELDS TERMINATED BY WHITESPACE ( -- 定义FILLER字段存储文件名,该字段不会插入到目标表 xml_filename FILLER CHAR(200), -- 通过LOBFILE读取xml_filename指向的XML文件内容,加载到XML_字段 XML_ LOBFILE(xml_filename) TERMINATED BY EOF )
若坚持使用SDF语法(早期版本兼容写法),需保证先定义引用字段:
LOAD DATA INFILE 'filenames.dat' TRUNCATE INTO TABLE FOP2 FIELDS TERMINATED BY WHITESPACE ( xml_filename FILLER CHAR(200), XML_ SDF(xml_filename) )
场景2:直接加载单个XML文件
如果仅需加载单个XML文件(比如data.xml),loader.ctl可简化为:
LOAD DATA INFILE 'data.xml' "str '<EOF>'" TRUNCATE INTO TABLE FOP2 ( -- 将整个XML内容作为字符串加载到XMLTYPE字段 XML_ CHAR(4000) )
若XML文件超过4000字符,改用CLOB中转:
LOAD DATA INFILE 'data.xml' "str '<EOF>'" TRUNCATE INTO TABLE FOP2 ( xml_clob FILLER CLOB, XML_ EXPRESSION(xmltype(xml_clob)) )
关键排查点
- 检查SDF/LOBFILE引用的字段名,必须与控制文件字段列表中的名称完全一致(Oracle默认字段名为大写,控制文件中若用小写且未加双引号,会自动转为大写)。
- 确保引用的字段已定义为
FILLER(无需插入表时)或普通字段,且字段类型能容纳文件路径长度(比如CHAR(200)足够存储大部分路径)。 - 确认
filenames.dat中的路径均有效,且执行SQL*Loader的用户拥有对应XML文件的读取权限。
验证步骤
- 替换
loader.ctl为上述正确配置 - 重新执行加载命令:
sqlldr usr/psw loader.ctl - 查看生成的
loader.log日志文件,确认加载结果;若有其他错误,根据日志提示进一步调整。
内容的提问来源于stack exchange,提问作者Pavel_
相关产品推荐
相关产品推荐

