您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 汕头分类信息网,免费分类信息发布

Oracle数据库SqlLoad常用技巧总结

2024/3/8 14:02:55发布20次查看
欢迎进入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]
汕头分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录