详细讲解Oracle SQLLoader的使用方法.docx
- 文档编号:8794233
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:13
- 大小:17.99KB
详细讲解Oracle SQLLoader的使用方法.docx
《详细讲解Oracle SQLLoader的使用方法.docx》由会员分享,可在线阅读,更多相关《详细讲解Oracle SQLLoader的使用方法.docx(13页珍藏版)》请在冰点文库上搜索。
详细讲解OracleSQLLoader的使用方法
SQL*Loader系Oracle数据库导入外部数据滴一个工具.它和DB2滴Load工具相近,但有更多滴选择,它支持变化滴加载模式,详细讲解OracleSQL*Loader的使用方法,可选滴加载及多表加载.
如何使用SQL*Loader工具
本人们可用Oracle滴sqlldr工具来导入数据。
例如:
sqlldrscott/tigercontrol=loader.ctl
控制文件(loader.ctl)将加载一个外部数据文件(含分隔符).loader.ctl如下:
loaddata
infile'c:
\data\mydata.csv'
intotableemp
fieldsterminatedby","optionallyenclosedby'"'
(empno,empname,sal,deptno)
mydata.csv如下:
10001,"ScottTiger",1000,40
10002,"FrankNaude",500,20
下面系一个指定记录长度滴示例控制文件。
"*"代表数据文件与此文件同名,即在后面使用BEGINDATA段来标识数据。
loaddata
infile*
replace
intotabledepartments
(deptposition(02:
05)char(4),
deptnameposition(08:
27)char(20)
)
begindata
COSCCOMPUTERSCIENCE
ENGLENGLISHLITERATURE
MATHMATHEMATICS
POLYPOLITICALSCIENCE
Unloader这样滴工具
Oracle没有提供将数据导出到一个文件滴工具。
可系,如test.csv,再编写一个insert.ctl
用sqlldr进行导入!
insert.ctl内容如下:
loaddata --1、控制文件标识
infile'test.csv' --2、要输入滴数据文件名为test.csv
appendintotabletable_name --3、向表table_name中追加记录
fieldsterminatedby',' --4、字段终止于',',本人们可用SQL*Plus滴select及format数据来输出到一个文件:
setechooffnewpage0space0pagesize0feedoffheadofftrimspoolon
spooloradata.txt
selectcol1||','||col2||','||col3
fromtab1
wherecol2='XYZ';
spooloff
别的,也可使用使用UTL_FILEPL/SQL包处理:
remRemembertoupdateinitSID.ora,utl_file_dir='c:
\oradata'parameter
declare
fputl_file.file_type;
begin
fp:
=utl_file.fopen('c:
\oradata','tab1.txt','w');
utl_file.putf(fp,'%s,%s\n','TextField',55);
utl_file.fclose(fp);
end;
/
当然你也可使用第三方工具,如SQLWays,TOADforQuest等。
加载可变长度或指定长度滴记录
如:
LOADDATA
INFILE*
INTOTABLEload_delimited_data
FIELDSTERMINATEDBY","OPTIONALLYENCLOSEDBY'"'
TRAILINGNULLCOLS
(data1,
data2
)
BEGINDATA
11111,AAAAAAAAAA
22222,"A,B,C,D,"
下面系导入固定位置(固定长度)数据示例:
LOADDATA
INFILE*
INTOTABLEload_positional_data
(data1POSITION(1:
5),
data2POSITION(6:
15)
)
BEGINDATA
11111AAAAAAAAAA
22222BBBBBBBBBB
跳过数据行:
可用"SKipn"关键字来指定导入时可跳过多少行数据。
如:
LOADDATA
INFILE*
INTOTABLEload_positional_data
SKIP5
(data1POSITION(1:
5),
data2POSITION(6:
15)
)
BEGINDATA
11111AAAAAAAAAA
22222BBBBBBBBBB
导入数据时修改数据:
在导入数据到数据库时,可修改数据。
注意,这仅适合于常规导入,并不适合direct导入方式.如:
LOADDATA
INFILE*
INTOTABLEmodified_data
(rec_no"my_db_sequence.nextval",
regionCONSTANT'31',
time_loaded"to_char(SYSDATE,'HH24:
MI')",
data1POSITION(1:
5)":
data1/100",
data2POSITION(6:
15)"upper(:
data2)",
data3POSITION(16:
22)"to_date(:
data3,'YYMMDD')"
)
BEGINDATA
11111AAAAAAAAAA991201
22222BBBBBBBBBB990112
LOADDATA
INFILE'mail_orders.txt'
BADFILE'bad_orders.txt'
APPEND
INTOTABLEmailing_list
FIELDSTERMINATEDBY","
(addr,
city,
state,
zipcode,
mailing_addr"decode(:
mailing_addr,null,:
addr,:
mailing_addr)",
mailing_city"decode(:
mailing_city,null,:
city,:
mailing_city)",
mailing_state
)
将数据导入多个表:
如:
LOADDATA
INFILE*
REPLACE
INTOTABLEemp
WHENempno!
=''
(empnoPOSITION(1:
4)INTEGEREXTERNAL,
enamePOSITION(6:
15)CHAR,
deptnoPOSITION(17:
18)CHAR,
mgrPOSITION(20:
23)INTEGEREXTERNAL
)
INTOTABLEPRoj
WHENprojno!
=''
(projnoPOSITION(25:
27)INTEGEREXTERNAL,
empnoPOSITION(1:
4)INTEGEREXTERNAL
)
导入选定滴记录:
如下例:
(01)代表第一个字符,(30:
37)代表30到37之间滴字符:
LOADDATA
INFILE'mydata.dat'BADFILE'mydata.bad'DISCARDFILE'mydata.dis'
APPEND
INTOTABLEmy_selective_table
WHEN(01)<>'H'and(01)<>'T'and(30:
37)='19991217'
(
regionCONSTANT'31',
service_keyPOSITION(01:
11)INTEGEREXTERNAL,
call_b_noPOSITION(12:
29)CHAR
)
导入时跳过某些字段:
可用POSTION(x:
y)来分隔数据.在Oracle8i中可透过指定FILLER字段呈现。
FILLER字段用来跳过、忽略导入数据文件中滴字段.如:
LOADDATA
TRUNCATEINTOTABLET1
FIELDSTERMINATEDBY','
(field1,
field2FILLER,
field3
)
导入多行记录:
可使用下面两个选项之一来呈现将多行数据导入为一个记录:
CONCATENATE:
-usewhenSQL*Loadershouldcombinethesamenumberofphysicalrecordstogethertoformonelogicalrecord.
CONTINUEIF-useifaconditionindicatesthatmultiplerecordsshouldbetreatedasone.Eg.byhavinga'#'characterincolumn1.
SQL*Loader数据滴提交:
一般情况下系在导入数据文件数据后提交滴。
也可透过指定ROWS=参数来指定每次提交记录数。
提高SQL*Loader滴性能:
1)一个简单而容易忽略滴漏洞系,没有对导入滴表使用任何索引和/或约束(主键)。
如这样做,甚至在使用ROWS=参数时,会很明显降低数据库导入性能。
2)可添加DIRECT=TRUE来提高导入数据滴性能。
当然,在很多情况下,不能使用此参数。
3)透过指定UNRECOVERABLE选项,可关闭数据库滴日志。
这个选项只能和direct一起使用。
4)可同时运行多个导入任务.
常规导入与direct导入方式滴区别:
常规导入可透过使用INSERT语句来导入数据。
Direct导入可跳过数据库滴相关逻辑(DIRECT=TRUE),而直接将数据导入到数据文件中。
导入数据时修改数据:
在导入数据到数据库时,可修改数据。
注意,这仅适合于常规导入,并不适合direct导入方式.如:
LOADDATA
INFILE*
INTOTABLEmodified_data
(rec_no"my_db_sequence.nextval",
regionCONSTANT'31',
time_loaded"to_char(SYSDATE,'HH24:
MI')",
data1POSITION(1:
5)":
data1/100",
data2POSITION(6:
15)"upper(:
data2)",
data3POSITION(16:
22)"to_date(:
data3,'YYMMDD')"
)
BEGINDATA
11111AAAAAAAAAA991201
22222BBBBBBBBBB990112
LOADDATA
INFILE'mail_orders.txt'
BADFILE'bad_orders.txt'
APPEND
INTOTABLEmailing_list
FIELDSTERMINATEDBY","
(addr,
city,
state,
zipcode,
mailing_addr"decode(:
mailing_addr,null,:
addr,:
mailing_addr)",
mailing_city"decode(:
mailing_city,null,:
city,:
mailing_city)",
mailing_state
)
将数据导入多个表:
如:
LOADDATA
INFILE*
REPLACE
INTOTABLEemp
WHENempno!
=''
(empnoPOSITION(1:
4)INTEGEREXTERNAL,
enamePOSITION(6:
15)CHAR,
deptnoPOSITION(17:
18)CHAR,
mgrPOSITION(20:
23)INTEGEREXTERNAL
)
INTOTABLEproj
WHENprojno!
=''
(projnoPOSITION(25:
27)INTEGEREXTERNAL,
empnoPOSITION(1:
4)INTEGEREXTERNAL
)
导入选定滴记录:
如下例:
(01)代表第一个字符,(30:
37)代表30到37之间滴字符:
LOADDATA
INFILE'mydata.dat'BADFILE'mydata.bad'DISCARDFILE'mydata.dis'
APPEND
INTOTABLEmy_selective_table
WHEN(01)<>'H'and(01)<>'T'and(30:
37)='19991217'
(
regionCONSTANT'31',
service_keyPOSITION(01:
11)INTEGEREXTERNAL,
call_b_noPOSITION(12:
29)CHAR
)
导入时跳过某些字段:
可用POSTION(x:
y)来分隔数据.在Oracle8i中可透过指定FILLER 字段呈现。
FILLER字段用来跳过、忽略导入数据文件中滴字段.如:
LOADDATA
TRUNCATEINTOTABLET1
FIELDSTERMINATEDBY','
(field1,
field2FILLER,
field3
)
导入多行记录:
可使用下面两个选项之一来呈现将多行数据导入为一个记录:
CONCATENATE:
-usewhenSQL*Loadershouldcombinethesamenumberofphysicalrecordstogethertoformonelogicalrecord.
CONTINUEIF-useifaconditionindicatesthatmultiplerecordsshouldbetreatedasone.Eg.byhavinga'#'characterincolumn1.
SQL*Loader数据滴提交:
一般情况下系在导入数据文件数据后提交滴。
也可透过指定ROWS=参数来指定每次提交记录数。
提高SQL*Loader 滴性能:
1)一个简单而容易忽略滴漏洞系,没有对导入滴表使用任何索引和/或约束(主键)。
如这样做,甚至在使用ROWS=参数时,会很明显降低数据库导入性能。
2)可添加DIRECT=TRUE来提高导入数据滴性能。
当然,在很多情况下,不能使用此参数。
3)透过指定 UNRECOVERABLE选项,可关闭数据库滴日志。
这个选项只能和direct一起使用。
4)可同时运行多个导入任务.
常规导入与direct导入方式滴区别:
常规导入可透过使用INSERT语句来导入数据。
Direct导入可跳过数据库滴相关逻辑(DIRECT=TRUE),而直接将数据导入到数据文件中。
sqlldr使用例子说明
先把Excel另存为.csv格式文件,如test.csv,再编写一个insert.ctl
用sqlldr进行导入!
insert.ctl内容如下:
loaddata --1、控制文件标识
infile'test.csv' --2、要输入滴数据文件名为test.csv
appendintotabletable_name --3、向表table_name中追加记录
fieldsterminatedby',' --4、字段终止于',',系一个逗号
(field1,
field2,
field3,
...
fieldn)-----定义列对应按次
注意括号中field排列按次要与csv文件中相对应
然后就可执行如下命令:
sqlldruser/passWordcontrol=insert.ctl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 详细讲解Oracle SQLLoader的使用方法 详细 讲解 Oracle SQLLoader 使用方法