Chinaunix
标题:
sqlldr 问题
[打印本页]
作者:
Gdla
时间:
2010-07-10 20:03
标题:
sqlldr 问题
表的前三个字段导入时设值常量,后面的字段导入文本文件里面的数据,文本文件的值是以tab分隔的,
SQL> desc t
Name Type Nullable Default Comments
---- ---------- -------- ------- --------
A1 NUMBER(8) Y
A2 NUMBER(8) Y
A3 NUMBER(10) Y
B1 NUMBER(10) Y
B2 CHAR(10) Y
复制代码
文本文件:
123 qwe
12345 asdf
678 asdf
复制代码
ctl文件:
LOAD DATA INFILE 'd:\Work\Tmp\sqlldr\dat\T.txt'
APPEND INTO TABLE EB_COLLECT.T FIELDS TERMINATED BY X'09' TRAILING NULLCOLS
( A1 "TO_CHAR(SYSDATE,'YYYYMMDD')",
A2 RECNUM,
A3 constant 1001,
B1,
B2)
复制代码
其中文本文件的第一列123,12345,678想导入到B1,后面的导入到B2,前面的A1,A2,A3设常量,现在的写法导入的时候报错,请各位指出需要修改的地方,谢谢
作者:
renxiao2003
时间:
2010-07-10 20:12
报什么错误。
作者:
Gdla
时间:
2010-07-10 20:19
回复
2#
renxiao2003
log文件
SQL*Loader: Release 10.2.0.1.0 - Production on 星期六 7月 10 19:45:58 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
控制文件: d:\Work\Tmp\sqlldr\ctl\t.ctl
数据文件: d:\Work\Tmp\sqlldr\dat\T.txt
错误文件: d:\Work\Tmp\sqlldr\ctl\T.bad
废弃文件: 未作指定
(可废弃所有记录)
要加载的数: ALL
要跳过的数: 0
允许的错误: 50
继续: 未作指定
所用路径: 直接
表 EB_COLLECT.T,已加载从每个逻辑记录
插入选项对此表 APPEND 生效
TRAILING NULLCOLS 选项生效
列名 位置 长度 中止 包装数据类型
------------------------------ ---------- ----- ---- ---- ---------------------
A1 FIRST * WHT CHARACTER
列的 SQL 串: "TO_CHAR(SYSDATE,'YYYYMMDD')"
A2 RECNUM
A3 CONSTANT
Value is '1001'
B1 NEXT * WHT CHARACTER
B2 NEXT * WHT CHARACTER
记录 1: 被拒绝 - 表 EB_COLLECT.T 的列 B1 出现错误。
ORA-01722: 无效数字
记录 2: 被拒绝 - 表 EB_COLLECT.T 的列 B1 出现错误。
ORA-01722: 无效数字
记录 3: 被拒绝 - 表 EB_COLLECT.T 的列 B1 出现错误。
ORA-01722: 无效数字
表 EB_COLLECT.T:
0 行 加载成功。
由于数据错误, 3 行 没有加载。
由于所有 WHEN 子句失败, 0 行 没有加载。
由于所有字段都为空的, 0 行 没有加载。
在直接路径中没有使用绑定数组大小。
列数组 行数: 3000
流缓冲区字节数: 256000
读取 缓冲区字节数: 5000000
跳过的逻辑记录总数: 0
读取的逻辑记录总数: 3
拒绝的逻辑记录总数: 3
废弃的逻辑记录总数: 0
由 SQL*Loader 主线程加载的流缓冲区总数: 2
由 SQL*Loader 加载线程加载的流缓冲区总数: 0
从 星期六 7月 10 19:45:58 2010 开始运行
在 星期六 7月 10 19:45:59 2010 处运行结束
经过时间为: 00: 00: 00.11
CPU 时间为: 00: 00: 00.06
复制代码
作者:
Gdla
时间:
2010-07-10 20:23
默认的值只能写在最后,前三个设默认值的字段放在后面就可以了
作者:
renxiao2003
时间:
2010-07-10 20:49
回复
1#
Gdla
控制文件如下:
LOAD DATA INFILE 't.txt'
APPEND INTO TABLE T FIELDS TERMINATED BY X'09' TRAILING NULLCOLS
(B1,
B2,
A1 "TO_CHAR(SYSDATE,'YYYYMMDD')",
A2 RECNUM,
A3 constant 1001)
复制代码
从数据导入字段写在前面,默认(不是从文件导入)的字段要卸载后面。这样就OK了。
作者:
renxiao2003
时间:
2010-07-10 20:50
本帖最后由 renxiao2003 于 2010-07-10 20:53 编辑
回复
1#
Gdla
SQL*Loader: Release 10.2.0.1.0 - Production on Sat Jul 10 20:46:42 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Control File: c.ctl
Data File: t.txt
Bad File: t.bad
Discard File: none specified
(Allow all discards)
Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array: 64 rows, maximum of 256000 bytes
Continuation: none specified
Path used: Conventional
Table T, loaded from every logical record.
Insert option in effect for this table: APPEND
TRAILING NULLCOLS option in effect
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
B1 FIRST * WHT CHARACTER
B2 NEXT * WHT CHARACTER
A1 NEXT * WHT CHARACTER
SQL string for column : "TO_CHAR(SYSDATE,'YYYYMMDD')"
A2 RECNUM
A3 CONSTANT
Value is '1001'
Table T:
3 Rows successfully loaded.
0 Rows not loaded due to data errors.
0 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fields were null.
Space allocated for bind array: 51328 bytes(64 rows)
Read buffer bytes: 1048576
Total logical records skipped: 0
Total logical records read: 3
Total logical records rejected: 0
Total logical records discarded: 0
Run began on Sat Jul 10 20:46:42 2010
Run ended on Sat Jul 10 20:46:47 2010
Elapsed time was: 00:00:04.83
CPU time was: 00:00:00.10
复制代码
上面是日志文件。
3 Rows successfully loaded.
三行数据都导入了。
作者:
Gdla
时间:
2010-07-10 22:43
谢谢你的回帖
作者:
renxiao2003
时间:
2010-07-11 16:23
回帖是美德,关键还要帮助把问题解决了啊。
作者:
duolanshizhe
时间:
2010-07-12 08:40
恩 默认值列应该写在最后的!
作者:
renxiao2003
时间:
2010-07-12 08:47
恩 默认值列应该写在最后的!
duolanshizhe 发表于 2010-07-12 08:40
但是一般来说不细看,可能不会注意这些细节(特别是刚开始使用的人)。
作者:
dream_land
时间:
2010-07-12 12:15
恩,还从没用过默认值,原来是这样用的,又学习了!
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2