|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
WindowsAzureSQLDatabase并不支持数据压缩和表分区之类的功能,而且SQLDatabase支持的Transact-SQL语言只是完整版的一部分。另外,因为解决方案提供商不能控制物理资源,所以他们不能将数据文件和索引分配给特定的硬件。oracleSQL*Loader是Oracle数据库导进内部数据的一个工具.它和DB2的Load工具类似,但有更多的选择,它撑持变更的加载形式,可选的加载及多表加载.
怎样利用SQL*Loader工具
我们能够用Oracle的sqlldr工具来导进数据。比方:
sqlldrscott/tigercontrol=loader.ctl
把持文件(loader.ctl)将加载一个内部数据文件(含分开符).loader.ctl以下:
loaddata
infilec:datamydata.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没有供应将数据导出到一个文件的工具。可是,我们能够用SQL*Plus的select及format数据来输入到一个文件:
setechooffnewpage0space0pagesize0feedoffheadofftrimspoolon
spooloradata.txt
selectcol1||,||col2||,||col3
fromtab1
wherecol2=XYZ;
spooloff
别的,也能够利用利用UTL_FILEPL/SQL包处置:
remRemembertoupdateinitSID.ora,utl_file_dir=c:oradataparameter
declare
fputl_file.file_type;
begin
fp:=utl_file.fopen(c:oradata,tab1.txt,w);
utl_file.putf(fp,%s,%s
,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",
regionCONSTANT31,
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
INFILEmail_orders.txt
BADFILEbad_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
INFILEmydata.datBADFILEmydata.badDISCARDFILEmydata.dis
APPEND
INTOTABLEmy_selective_table
WHEN(01)Hand(01)Tand(30:37)=19991217
(
regionCONSTANT31,
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),而间接将数据导进到数据文件中。
即使对于MySQL的商业化的企业版来说,也没有高昂的许可证成本,当你将其与像甲骨文和微软之类的大型专有商业数据库比较的话。 |
|