4

我正在使用 sqlldr 加载其中某些字段具有尾随和前导空格的数据。有没有办法告诉 sqlldr 忽略这些空格,而不是说

field "trim(:field)"

?

4

2 回答 2

4

字段“trim(:field)”在大多数情况下都可以正常工作,但我提出了列大小为 char(1) 但控制文件中的数据为“Y”和“trim(:field)”的典型情况未能加载数据。经过大量研究后,我知道 trim() 函数会修剪数据中的空格,但同时会在数据中添加 null 来代替空格,因此上例中的数据长度将为 2,因为它计算 null 值在数据的左侧。因此,数据将类似于 nullY,因为表中的列大小小于未加载的实际大小,并且 oracle 会抛出错误消息。为了克服这个问题,我使用了:“trim(null from trim(:field))”

上面的脚本首先修剪空白,然后再次修剪 sql-loader 附加的空值。

我希望我提供的信息对像我一样面临问题的人有所帮助。我无法抗拒发布此内容,因为我没有找到任何回答此类问题的线程。

于 2016-12-27T15:13:50.763 回答
1

我知道这是一个旧线程,但无论如何我都会插话。

与许多事情一样,答案是“视情况而定”。这取决于数据是固定格式还是分隔的。如果分隔,还取决于控制文件是否使用 OPTIONALLY ENCLOSED BY 子句。有关所有肮脏的细节,请参阅 Oracle SQL*Loader 文档。例如,试试这个链接:http ://docs.oracle.com/cd/B28359_01/server.111/b28319/ldr_field_list.htm#i1007768

于 2013-08-12T00:14:57.583 回答