使用 SQL*Loader 从文本文件加载后的额外空格

Posted

技术标签:

【中文标题】使用 SQL*Loader 从文本文件加载后的额外空格【英文标题】:Extra spaces after loading from a text file with SQL*Loader 【发布时间】:2015-01-07 12:53:39 【问题描述】:

我正在使用 Oracle 11g,我正在尝试使用 SQL*Loader 从文本文件中加载数据

这是一个数据示例(还有更多列):

123456789876543212,100,333,432,02/05/2014,02/05/2014,02/05/2014,1.1,AA

我想首先将数据作为 VARCHAR2 加载到数据库中,然后通过查询将它们转换为数据库中正确的数据类型。在我看来,这要容易得多。

这是我的桌子 (MyTable):

create table MyTable
(
   A varchar2(500)
   B varchar2(500)
   C varchar2(500)
   D varchar2(500)
   E varchar2(500)
   F varchar2(500)
   G varchar2(500)
   H varchar2(500)
   I varchar2(500)
)

这是我的加载脚本:

load data
infile 'D:\MyFile.txt'
into table MyTable
fields terminated by ','
trailing nullcols
(
       A char(4000),
       B char(4000),
       C char(4000),
       D char(4000),
       E char(4000),
       F char(4000),
       G char(4000),
       H char(4000),
       I char(4000)
)

这是数据加载到数据库后的样子。

1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 2,1 0 0,3 3 3,4 3 2,0 2 / 0 5 / 2 0 1 4,0 2 / 0 5 / 2 0 1 4,0 2 / 0 5 / 2 0 1 4, 1 . 1,A A

为什么我的数据看起来像这样?这些空间是什么?我在数据加载方面没有太多经验。

我猜问题出在数据库和加载文件中的表的数据类型上。定义诸如数据的正确方法是什么?我想将数据按原样加载到数据库中。我将通过查询在数据库中进行对话。请注意,第一列有 18 位数字。

【问题讨论】:

如果你不能从文件中删除你可以参考make replace the string ***.com/questions/5505835/… 这很大程度上取决于您的文本编辑器@Omri。 好的。谢谢。我会检查一下。 【参考方案1】:

加载后在每个字符之间插入“空格”的正常原因是因为在原始文本文件中的每个字符之后都有一个nul(ASCII 0)。如果您在十六进制文本编辑器中查看您的文件,您应该能够看到这一点(它将表示为 00)。您还可以使用DUMP() 函数查看您的表格。

如果没有额外的参数,DUMP() 是一个有用的函数,它返回您传递给它的数据的data-type code、数据的长度(以字节为单位)以及“expr”的内部表示。文档中解释了其他一些选项。

从下面你会看到数据类型代码是 96,它代表一个 CHAR。,长度是 1,即字符串是 1 字节长,内部表示是 97,这是 @ 的 ASCII 代码987654327@.

SQL> select dump('a')
  2    from dual;

DUMP('A')
----------------
Typ=96 Len=1: 97

在您的情况下,您期望 nuls 的代码为 0。

在您仔细检查后,我会返回您的供应商并告诉他们删除这些字符,因为您无法判断它们是实际的 nul 字符还是多字节字符的一部分.如果您无法修复文件,我已经从数据库中获取了 previously written about the strategies for removing nuls。

【讨论】:

以上是关于使用 SQL*Loader 从文本文件加载后的额外空格的主要内容,如果未能解决你的问题,请参考以下文章

Sql Loader的简单使用

通过 SQL LOADER 存储日期和时间值

批量生成sqlldr文件,高速卸载数据

SQL*Loader 加载数据问题,创建了.ctl 文件,在执行sqlldr命令之后出现找不到文件

如何从 Python 中的数据中删除多余的逗号

如何通过 sql loader 设置要加载到表列中的固定长度