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

SqlLoader怎么使用

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

SQL*Loader(SQLLDR)是Oracle的高速批量数据加载工具。这是一个非常有用的工具,可用于多种平面文件格式向Oralce数据库中加载数据。今天看了申请了*loader的使用,自己小试了下,记录在这

1、假设要插入数据的表ftest,字段是(id,username,password,sj)

2、导入表的数据 以txt格式存储,名为data.txt

 1 f f 2010-8-19
2 f1 f1 2010-8-19
3 f2 f2 2010-8-19
4 f3 f3 2010-8-19
5 f4 f4 2010-8-19

nbsp;3、写控制文件,格式为ctl,命名为cont.ctl 内容如下:

 load data          
infile 'c:data.txt'       
insert into table ftest    
fields terminated by " "
(id,username,password,sj)

注:如果表中没有数据就用insert,有数据就用append,删除旧数据插入新的数据用replace或truncate

4 在cmd命令窗口中执行nbsp;

sqlldr fyzh/fyzh control=c:cont.ctl data=c:data.txt

5 在plsql中查看表ftest

查看已成功插入。

nbsp;重新学习sqlldr

sqlldr导入数据的一个最简单例子:

load data
infile * --告诉sqlldr要加载的数据就包含在控制文件本身
into table dept --加载到哪个表
fields terminated by ',' --数据加载形式应该是逗号分隔的值
(deptno,dname,loc) --所要加载的列
begindata      --告诉sqlldr后面的行市要加载到dept表的数据
10,Sales,Virginia
20,Accounting,Virginia
30,Consulting,Virginia
40,Finance,Virginia
create table dept
(deptno number(2) constraint dept_pk primary key,
dname varchar2(14),
loc varchar2(13)
)
sqlldr userid=gwm/gwm@fgisdb control=c:demol.ctl
select * from dept;
1  10  Sales  Virginia
2  20  Accounting  Virginia
3  30  Consulting  Virginia
4  40  Finance  Virginia

sqlldr导入的四种加载方式:

APPEND :原先的表有数据 就加在后面
INSERT:装载空表 如果原先的表有数据 sqlloader会停止 默认值
REPLACE :原先的表有数据 原先的数据会全部删除
TRUNCATE :指定的内容和replace的相同 会用truncate语句删除现存数据

用SQLLDR加载数据的FAQ

1、如何加载定界数据

nbsp;nbsp;nbsp; 1)定界数据即用某个特殊字符分隔的数据,可能用引号括起,这是当前平面文件最常见的数据格式。
nbsp;nbsp;nbsp; 对于定界数据,最常用的格式是逗号分隔值格式。采用这种文件格式,数据中的每个字段与下一个字段用一个逗号分隔。文本串可以用引号括起,这样就串本身包含逗号。如果串还必须包含引号,一般约定是使用两个引号。加载定界数据,相应的典型控制文件与前面例子相似,但是fields terminated by子句通常如下指定:

 fields terminated by ',' optionally enclose by '"'

nbsp; 它指定用逗号分隔数据字段,每个字段可以用双引号括起。如果把这个控制文件的最后部分修改如下:

  fields terminated by ',' optionally enclosed by '"'
  (deptno,dname,loc) 
  begindata     
  10,Sales,"Virginia,USA"
  20,Accounting,"Va,""USA"""
  30,Consulting,Virginia
  40,Finance,Virginia
select * from dept
1  10  Sales  Virginia,USA
2  20  Accounting  Va,"USA"
3  30  Consulting  Virginia 
4  40  Finance  Virginia

2)另一种常用的格式是制表符定界数据。有两种方法使用terminated by子句来加载这种数据:

nbsp;nbsp; terminated by X'09' --使用十六进制格式的制表符;若用ASCII,制表符应该是9

 terminated by whitespace
--使用terminated by whitespace
load data
infile *
into table dept
replace
fields terminated by whitespace
(deptno,dname,loc) 
begindata     
10 Sales Virginia 
select * from dept;
1  10  Sales  Virginia
--使用terminated by X'09'
load data
infile *
into table dept
replace
fields terminated by X'09'
(deptno,dname,loc) 
begindata     
10        Sales        Virginia
select * from dept;
1  10  

Sales --因为一旦遇到一个制表符就会输出一个值。

因此,将10赋给deptno,dname得到了null,因为在第一个制表符和第二个制表符之间没有数据

3)sqlldr的filler关键字使用

如跳过制表符

load data
infile *
into table dept
replace
fields terminated by X'09'
(deptno,dummy1 filler,dname,dummy2 filler,loc) 
begindata     
10        Sales        Virginia
select * from dept;
1  10  Sales  Virginia

2、如何加载固定格式数据

nbsp;nbsp; 要加载定宽的固定位置数据,将会在控制文件中使用position关键字。

load data
infile *
into table dept
replace
(deptno position(1:2),
 dname position(3:16),
 loc position(17:29)
 ) 
begindata     
10Accounting   Virginia,USA
select * from dept;
1  10  Accounting   Virginia,USA

nbsp;nbsp;nbsp; 这个控制文件没有使用terminated by子句;而是使用了position来告诉sqlldr 字段从哪里开始,到哪里结束。
对于position,我们可以使用重叠的位置,可以在记录中来回反复。如下修改dept表:

alter table dept add entire_line varchar(29);

并使用如下控制文件:

load data
infile *
into table dept
replace
(deptno position(1:2),
 dname position(3:16),
 loc position(17:29),
 entire_line position(1:29)
 ) 
begindata     
10Accounting   Virginia,USA
select * from dept;
1  10  Accounting   Virginia,USA  10Accounting  
Virginia,USA

使用position时,可以使用相对偏移量,也可以使用绝对偏移量。前面的例子使用了绝对偏移量,明确指定字段从哪开始,从哪结束,也可以将
前面的控制文件改写如下:

load data
infile *
into table dept
replace
(deptno position(1:2),
 dname position(*:16),
 loc position(*:29),
 entire_line position(1:29)
 ) 
begindata     
10Accounting   
Virginia,USA

(编辑:温州站长网)

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

热点阅读