SQL 加载程序不兼容的长度

SQL Loader incompatible length

这是我的控制文件

FIELDS (
  dummy1  filler  terminated by "cid=",
  address         enclosed by "<address>" and "</address>"
...

table 中的 address 列是 varchar(10)

如果文件中的地址超过 10 个字符,则 SQL*Loader 无法加载它。

如何捕获截断为 10 个字符的地址?

文档中有一节关于 applying SQL operators to fields

A wide variety of SQL operators can be applied to field data with the SQL string. This string can contain any combination of SQL expressions that are recognized by the Oracle database as valid for the VALUES clause of an INSERT statement. In general, any SQL function that returns a single value that is compatible with the target column's datatype can be used.

在这种情况下,您可以对文件中的值使用 substr() 函数:

...
  dummy filler  terminated by "cid=",
  address enclosed by "<address>" and "</address>" "substr(:address, 1, 10)"
...

引用的 "substr(:address, 1, 10)" 在插入生成的 10 个字符(最大)值之前通过函数传递文件中的初始值,无论文件中的原始值有多长。请注意该函数调用中名称前的冒号。


如果您的文件是 XML 那么您最好将其加载为 an external table 然后使用内置的 XML 查询工具来提取您想要的数据,而不是而不是尝试通过分隔的字段定义来解析它。