加入收藏 | 设为首页 | 会员中心 | 我要投稿 武汉站长网 (https://www.027zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

SqlLoader怎么使用

发布时间:2016-11-27 17:53:44 所属栏目:大数据 来源:站长网
导读:SQL*Loader(SQLLDR)是Oracle的高速批量数据加载工具。这是一个非常有用的工具,可用于多种平面文件格式向Oralce数据库中加载数据。今天看了申请了*loader的使用,自己小试了下,记录在这 1、假设要插入数据的表ftest,字段是(id,username,password,sj)

nbsp;nbsp;nbsp; *指示控制文件得出上一个字段在哪里结束。因此,在这种情况下,(*:16)与(3:16)是一样的。注意,控制文件可以混合使用相对位置和绝对位置。
另外,使用*表示法时,可以把它与偏移量相加。例如dname从deptno结束之后的;两个字符开始,可以使用(*+2:16),即相当于(5:16).

nbsp;nbsp;nbsp; position子句中的结束位置必须是数据结束的绝对列位置。有时,可能指定每个字段的长度更为容易,特别是如果这些字段是连续的。采用这种

nbsp; 方式,只需告诉sqlldr:记录从第一个字节开始,然后指定每个字段的长度。如下:

load data
infile *
into table dept
replace
(deptno position(1) char(2),
 dname position(*) char(14),
 loc position(*) char(13),
 entire_line position(1) char(29)
 ) 
begindata     
10Accounting   Virginia,USA 
select * from dept;

3、如何加载日期

nbsp;nbsp;nbsp; 使用sqlldr加载日期只需在控制文件中date数据类型,并指定要使用的日期掩码。这个日期掩码与数据库中to_char和to_date中使用的日期掩码一样。

nbsp; 如修改dept表如下:

alter table dept add last_updated date;
load data
infile *
into table dept
replace
fields terminated by ','
(deptno,
 dname,
 loc,
 last_updated date 'dd/mm/yyyy'
 ) 
begindata     
10,Accounting,Virginia,1/5/2000
select * from dept;
1  10  
Accounting  
 Virginia   
 2000-5-1

4、如何使用函数加载数据

如果想确保加载的数据是大写的,可以改写控制文件如下:

load data
infile *
into table dept
replace
fields terminated by ','
(deptno,
 dname "upper(:dname)",
 loc "upper(:loc)",
 last_updated date 'dd/mm/yyyy'
 ) 
begindata     
10,Accounting,Virginia,1/5/2000
select * from dept;
1  10  
 ACCOUNTING  
 VIRGINIA    
2000-5-1

如下控制文件加载数据无法导入

load data
infile *
into table dept
replace
fields terminated by ','
(deptno,
 dname "upper(:dname)",
 loc "upper(:loc)",
 last_updated date 'dd/mm/yyyy',
 entire_line ":deptno||:dname||:loc||:last_updated"
 ) 
begindata     
10,Accounting,Virginia,1/5/2000

1)TRAILING NULLCOLS的使用:一般默认用的好

nbsp;nbsp;nbsp; 解决方法,就是使用TRAILING NULLCOLS。这样,如果输入记录中不存在某一列的数据,sqlldr就会为该列绑定一个null值。

这种情况下,增加TRAILING NULLCOLS会导致绑定变量:entire_line成为null。

load data
infile *
into table dept
replace
fields terminated by ','
TRAILING NULLCOLS
(deptno,
 dname "upper(:dname)",
 loc "upper(:loc)",
 last_updated date 'dd/mm/yyyy',
 entire_line ":deptno||:dname||:loc||:last_updated"
 ) 
begindata     
10,Accounting,Virginia,1/5/2000
select * from dept;
1  10  ACCOUNTING  VIRGINIA  10AccountingVirginia1/5/2000  2000-5-1

2)case在sqlldr中的使用

假设输入文件中有以下格式的日期:
HH24:MI:SS:只有一个时间;日期时间默认为sysdate
DD/MM/YYYY:只有一个日期,时间默认为午夜0点
HH24:MI:SS DD/MM/YYYY:日期时间都显式提供

可用如下的控制文件

load data
infile *
into table dept
replace
fields terminated by ','
TRAILING NULLCOLS
(deptno,
 dname "upper(:dname)",
 loc "upper(:loc)",
 last_updated
 "case 
 when length(:last_updated)gt;9
 then to_date(:last_updated,'hh24:mi:ss dd/mm/yyyy')
 when instr(:last_updated,':')gt;0
 then to_date(:last_updated,'hh24:mi:ss')
 else to_date(:last_updated,'dd/mm/yyyy')
 end"
 )
 begindata
10,Sales,Virginia,12:03:03 17/10/2005
20,Accounting,Virginia,02:23:54
30,Consulting,Virginia,01:24:00 21/10/2006
40,Finance,Virginia,17/8/2005
alter session set nls_date_format='dd-mon-yyyy hh24:mi:ss';
select * from dept;

5、如何加载有内嵌换行符的数据

1)用非换行符的其它字符来表示换行符,并在加载时使用一个sql函数用一个CHR(10)替换该文本。

alter table dept add comments varchar2(4000);
--使用下列来加载文本
load data
infile *
into table dept
replace
fields terminated by ','
trailing nullcols
(deptno,
 dname "upper(:dname)",
 loc "upper(:loc)",
 comments "replace(:comments,'n',chr(10))" --'n'换行符用chr(10)这个代替
)
begindata
10,Sales,Virginia,this is the salesnoffice in Virginia

注:调用中必须用n来表示替换符,而不是n

2)在infile指令上使用FIX属性,加载一个定长平面文件。
nbsp;nbsp;nbsp; 使用该方法,输入数据必须出现在定长记录中。对于固定位置的数据,使用FIX属性就特别合适,这些文件一般为定长文件。
nbsp;nbsp;nbsp; 另外使用该方法时,数据必须在外部存储,不能存储在控制文件本身。

--控制文件
load data
infile demo.dat "fix 80" --指定了输入数据文件demo.dat,这个文件中每个记录80字节
into table dept
replace
fields terminated by ','
trailing nullcols
(deptno,
 dname "upper(:dname)",
 loc "upper(:loc)",
 comments
)
--数据文件
10,Sales,Virginia,this is the salesnoffice in Virginia            
20,,,Sales,Virginia,this is the salesnoffice in Virginia   
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;

注:

(编辑:武汉站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读