欢迎进入oracle社区论坛,与200万技术人员互动交流 >>进入 1、控制文件中注释用--. 2、为防止导入出现中文乱码,在控制文件中加入字符集控制 load data characterset zhs16gbk 3、让某一列成为行号,用recnum关键字 load data infile * into table t repla
欢迎进入oracle社区论坛,与200万技术人员互动交流 >>进入
1、控制文件中注释用--.
2、为防止导入出现中文乱码,在控制文件中加入字符集控制
load data
characterset zhs16gbk
3、让某一列成为行号,用recnum关键字
load data
infile *
into table t
replace
( seqno recnum //载入每行的行号
text position(1:1024))
begindata
fsdfasj
4、过滤某一列,用filler关键字
load data
truncate into table t1
fields terminated by ','
( field1,
field2 filler,
field3
)
5、过滤行
在into table table_name后加when过滤条件,但功能有限,如果以竖线分隔符的文件,不能实现字段级的过滤,定长的还好。
load data
infile 'mydata.dat'
badfile 'mydata.bad'
discardfile 'mydata.dis'
append
into table my_selective_table
when (01) 'h' and (01) 't' and (30:37) = '20031217'
(
region constant '31',
service_key position(01:11) integer external,
call_b_no position(12:29) char
)
6、过滤首行,用options (skip 1)选项,也可以写在命令行中,如:
sqlldr sms/admin control=test.ctl skip=1
7、trailing nullcols的使用,作用是表的字段没有对应的值时允许为空
如:
load data
infile *
into table dept
replace
fields terminated by ','
trailing nullcols // 其实下面的entire_line在begindata后面的数据中是没有直接对应的列的值的如果第一行改为 10,sales,virginia,1/5/2000,, 就不用trailing nullcols了
(deptno,
dname upper(:dname), // 使用函数
loc upper(:loc),
last_updated date 'dd/mm/yyyy', // 日期的一种表达方式 还有'dd-mon-yyyy' 等
entire_line :deptno||:dname||:loc||:last_updated
)
begindata
10,sales,virginia,1/5/2000
20,accounting,virginia,21/6/1999
30,consulting,virginia,5/1/2000
40,finance,virginia,15/3/2001
8、添加、修改数据
(1)、
load data
infile *
into table tmp_test
( rec_no my_db_sequence.nextval,
region constant '31',
time_loaded to_char(sysdate, 'hh24:mi'),
data1 position(1:5) :data1/100,
data2 position(6:15) upper(:data2),
data3 position(16:22)to_date(:data3, 'yymmdd')
)
begindata
11111aaaaaaaaaa991201
22222bbbbbbbbbb990112
(2)、
load data
infile 'mail_orders.txt'
badfile 'bad_orders.txt'
append
into table mailing_list
fields terminated by ,
( addr,
city,
state,
zipcode,
mailing_addr decode(:mailing_addr, null, :addr, :mailing_addr),
mailing_city decode(:mailing_city, null, :city, :mailing_city),
mailing_state
)
9、合并多行记录为一行记录
通过关键字concatenate 把几行的记录看成一行记录:
load data
infile *
concatenate 3 // 通过关键字concatenate 把几行的记录看成一行记录
into table dept
replace
fields terminated by ','
(deptno,
dname upper(:dname),
loc upper(:loc),
last_updated date 'dd/mm/yyyy'
)
begindata
10,sales, // 其实这3行看成一行 10,sales,virginia,1/5/2000
virginia,
1/5/2000
10、用|+|分隔符,避免数据混淆:fields terminated by |+|
11、如果数据文件包含在控制文件中,用infile *
如下:
load data
infile *
append
into table tmp_test
fields terminated by ,
optionally enclosed by ''
trailing nullcols
( data1,
data2
)
begindata
11111,aaaaaaaaaa
22222,a,b,c,d,
12、一次导入多个文件到同一个表
load data
infile file1.dat
infile file2.dat
infile file3.dat
append
into table emp
( empno position(1:4) integer external,
ename position(6:15) char,
deptno position(17:18) char,
mgr position(20:23) integer external
)
[1] [2]