SqlLoader怎么使用
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 :原先的表有数据 就加在后面 用SQLLDR加载数据的FAQ 1、如何加载定界数据 nbsp;nbsp;nbsp; 1)定界数据即用某个特殊字符分隔的数据,可能用引号括起,这是当前平面文件最常见的数据格式。 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 字段从哪里开始,到哪里结束。 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 (编辑:温州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |