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

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文件的读取权限。

验证步骤

  1. 替换loader.ctl为上述正确配置
  2. 重新执行加载命令:sqlldr usr/psw loader.ctl
  3. 查看生成的loader.log日志文件,确认加载结果;若有其他错误,根据日志提示进一步调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:35:33