这是我的控制文件
FIELDS (
dummy1 filler terminated by "cid=",
address enclosed by "<address>" and "</address>"
...
表格中的address
列为varchar(10)
。
如果文件中的地址超过10个字符,则SQL * Loader无法加载它。
如何捕获地址截断为10个字符?
答案 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查询工具来提取所需的数据,而不是尝试通过分隔的字段定义来解析它。