我正在使用sqlldr加载数据,其中一些字段具有尾随和前导空格。除了通过以下方式之外,是否有一种告诉sqlldr忽略这些空格的方法:
field "trim(:field)"
?
我正在使用sqlldr加载数据,其中一些字段具有尾随和前导空格。除了通过以下方式之外,是否有一种告诉sqlldr忽略这些空格的方法:
field "trim(:field)"
?
在大多数情况下,字段“trim(:field)”可以正常工作,但我遇到了一个典型的情况:列的大小为char(1),但控制文件中的数据却是' Y',而“trim(:field)”无法加载该数据。 经过大量研究,我得知trim()函数会从数据中去除空格,但同时会在数据中添加null值来替代空格,因此在上述示例中,数据长度将为2,因为它计算左侧数据中的null值。因此,数据将类似于nullY,由于表中的列大小小于实际大小,因此无法加载,并且Oracle会显示错误消息。 为了解决这个问题,我使用了以下方法: "trim(null from trim(:field))"
上面的脚本首先去除空格,然后再次去除sql-loader附加的null。
我希望提供的信息对任何遇到类似问题的人都有帮助,因为我没有找到任何回答这种问题的线程。
我知道这是个老帖子,但我仍然想要发表意见。
就像许多事情一样,“这取决于。” 这取决于数据是否为固定格式或分隔符格式。 如果是分隔符格式,则还取决于控制文件是否使用了“OPTIONALLY ENCLOSED BY”子句。 有关所有详细信息,请参见Oracle SQL*Loader文档。例如,请尝试此链接:http://docs.oracle.com/cd/B28359_01/server.111/b28319/ldr_field_list.htm#i1007768
PRESERVE BLANKS
选项,前导和尾随空格将被忽略。我的问题源于我使用的一个在 sqlldr 之上的工具生成 ctl 文件,默认添加了PRESERVE BLANKS
选项。 - Isaac Kleinman