orb*_*ish 18 oracle sql-loader
我有一个深奥的sqlldr问题困扰着我.我的控制文件看起来像这样:
load data
infile 'txgen.dat'
into table TRANSACTION_NEW
fields terminated by "," optionally enclosed by '"'
TRAILING NULLCOLS
( A,
B,
C,
D,
ID "ID_SEQ.NEXTVAL"
)
Run Code Online (Sandbox Code Playgroud)
数据是这样的:
a,b,c,
a,b,,d
a,b,,
a,b,c,d
Run Code Online (Sandbox Code Playgroud)
如果我没有把TRAILING NULLCOLS放入,我得到"在逻辑记录结束之前找不到列"错误.但是虽然有些列是空的,但是逗号都在那里,所以我没有看到sqlldr错误解释输入文件的原因,并且没有到达它从数据库序列生成ID的结尾.
这个语法之前没有空列 - 为什么空列导致sqlldr无法到达生成的列?
我有它的工作,我只想了解为什么!?!
DCo*_*kie 15
您已在控制文件中定义了5个字段.您的字段以逗号结束,因此除非指定TRAILING NULLCOLS,否则您需要在5个字段的每个记录中使用5个逗号,即使您通过SQL字符串加载带有序列值的ID字段.
RE:OP评论
这不是我的简短测试经验.使用以下控制文件:
load data
infile *
into table T_new
fields terminated by "," optionally enclosed by '"'
( A,
B,
C,
D,
ID "ID_SEQ.NEXTVAL"
)
BEGINDATA
1,1,,,
2,2,2,,
3,3,3,3,
4,4,4,4,,
,,,,,
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
Table T_NEW, loaded from every logical record.
Insert option in effect for this table: INSERT
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
A FIRST * , O(") CHARACTER
B NEXT * , O(") CHARACTER
C NEXT * , O(") CHARACTER
D NEXT * , O(") CHARACTER
ID NEXT * , O(") CHARACTER
SQL string for column : "ID_SEQ.NEXTVAL"
Record 1: Rejected - Error on table T_NEW, column ID.
Column not found before end of logical record (use TRAILING NULLCOLS)
Record 2: Rejected - Error on table T_NEW, column ID.
Column not found before end of logical record (use TRAILING NULLCOLS)
Record 3: Rejected - Error on table T_NEW, column ID.
Column not found before end of logical record (use TRAILING NULLCOLS)
Record 5: Discarded - all columns null.
Table T_NEW:
1 Row successfully loaded.
3 Rows not loaded due to data errors.
0 Rows not loaded because all WHEN clauses were failed.
1 Row not loaded because all fields were null.
Run Code Online (Sandbox Code Playgroud)
请注意,正确加载的唯一行有5个逗号.即使是第3行,除了ID之外还存在所有数据值,数据也不会加载.除非我遗漏了什么......
我正在使用10gR2.