sqlldr 仅将字符串的第一个字符加载到列中
sqlldr only loading first character of string into column
我正在尝试使用 sqlldr 将数据加载到数据库 table。
我遇到的问题是只有每行的第一个字符被加载。
我在 AIX 上使用 Oracle 12.1 版。
我的数据是单列文本文件。
每条记录的长度都是可变的。
在此测试集中,我们将数据限制为 10 个字符。
每行都在一个新行上。
它应该加载到单个列中 table.
我的空 table 定义为:
create table test_table (test_num varchar2(10));
我的数据看起来像但没有双倍行距:
3675536758
8370530737
9318078
5395653669
查看 od -c
中的数据,它看起来像:
0000000 3 6 7 5 5 3 6 7 5 8 \n 8 3 7 0 5
0000020 3 0 7 3 7 \n 9 3 1 8 0 7 8 \n 5 3
0000040 9 5 6 5 3 6 6 9 \n
0000051
我的控制文件如下所示:
load data
infile 'test.txt' "str '\n'"
into TABLE test_table
(test_num char "trim(:test_num)")
我遇到的问题只是每行的第一个字符被加载到 table。
无论是否使用 trim 函数,无论是否使用 "str '\n'"
,此行为都会持续存在
如有任何建议,我们将不胜感激。
将(test_num char "trim(:test_num)")
修改为(test_num char(10) "trim(:test_num)")
,记录将按预期加载。
char 将是一个字符,而 char(10) 将是 10 个字符。
在windows服务器上,我将控制文件更改为不使用流记录格式(不是问题的根源)。
load data
infile *
into TABLE test_table
(test_num char(10) "trim(:test_num)")
BEGINDATA
3675536758
8370530737
9318078
5395653669
我们现在看到这些记录:
SCOTT@erptst>select * from test_table;
TEST_NUM
3675536758
8370530737
9318078
5395653669
或者,terminated by whitespace
可能有帮助:
load data
infile *
replace
into table test_table
(test_num terminated by whitespace
)
begindata
3675536758
8370530737
9318078
5395653669
正在加载会话和结果:
SQL> $sqlldr scott/tiger@orclcontrol=test23.ctl
SQL*Loader: Release 11.2.0.2.0 - Production on Pet Vel 23 07:45:32 2018
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 3
Commit point reached - logical record count 4
SQL> select * from test_table;
TEST_NUM
----------
3675536758
8370530737
9318078
5395653669
SQL>
我正在尝试使用 sqlldr 将数据加载到数据库 table。 我遇到的问题是只有每行的第一个字符被加载。 我在 AIX 上使用 Oracle 12.1 版。 我的数据是单列文本文件。 每条记录的长度都是可变的。 在此测试集中,我们将数据限制为 10 个字符。 每行都在一个新行上。 它应该加载到单个列中 table.
我的空 table 定义为:
create table test_table (test_num varchar2(10));
我的数据看起来像但没有双倍行距:
3675536758
8370530737
9318078
5395653669
查看 od -c
中的数据,它看起来像:
0000000 3 6 7 5 5 3 6 7 5 8 \n 8 3 7 0 5
0000020 3 0 7 3 7 \n 9 3 1 8 0 7 8 \n 5 3
0000040 9 5 6 5 3 6 6 9 \n
0000051
我的控制文件如下所示:
load data
infile 'test.txt' "str '\n'"
into TABLE test_table
(test_num char "trim(:test_num)")
我遇到的问题只是每行的第一个字符被加载到 table。
无论是否使用 trim 函数,无论是否使用 "str '\n'"
如有任何建议,我们将不胜感激。
将(test_num char "trim(:test_num)")
修改为(test_num char(10) "trim(:test_num)")
,记录将按预期加载。
char 将是一个字符,而 char(10) 将是 10 个字符。
在windows服务器上,我将控制文件更改为不使用流记录格式(不是问题的根源)。
load data
infile *
into TABLE test_table
(test_num char(10) "trim(:test_num)")
BEGINDATA
3675536758
8370530737
9318078
5395653669
我们现在看到这些记录:
SCOTT@erptst>select * from test_table;
TEST_NUM
3675536758
8370530737
9318078
5395653669
或者,terminated by whitespace
可能有帮助:
load data
infile *
replace
into table test_table
(test_num terminated by whitespace
)
begindata
3675536758
8370530737
9318078
5395653669
正在加载会话和结果:
SQL> $sqlldr scott/tiger@orclcontrol=test23.ctl
SQL*Loader: Release 11.2.0.2.0 - Production on Pet Vel 23 07:45:32 2018
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 3
Commit point reached - logical record count 4
SQL> select * from test_table;
TEST_NUM
----------
3675536758
8370530737
9318078
5395653669
SQL>