SQL Loader长度不兼容

时间:2016-03-15 17:37:46

标签: oracle sql-loader

这是我的控制文件

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

表格中的address列为varchar(10)

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

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

1 个答案:

答案 0 :(得分:0)

文档中有applying SQL operators to fields部分。

  

可以使用SQL字符串将各种SQL运算符应用于字段数据。此字符串可以包含Oracle数据库可识别的任何SQL表达式组合,这些表达式对VALUES语句的INSERT子句有效。通常,可以使用任何返回与目标列的数据类型兼容的单个值的SQL函数。

在这种情况下,您可以对文件中的值使用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查询工具来提取所需的数据,而不是尝试通过分隔的字段定义来解析它。