CTL文件用法.docx
- 文档编号:11396409
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:10
- 大小:17.73KB
CTL文件用法.docx
《CTL文件用法.docx》由会员分享,可在线阅读,更多相关《CTL文件用法.docx(10页珍藏版)》请在冰点文库上搜索。
CTL文件用法
CTL文件用法
控制根据数据不同插入不同的表(条件装载);FIELDSTERMINATEDBYx’09′(制表符)whitespace(空格)等不同的数据分隔符号装载定长数据;装载变长数据;装载嵌套数据;在sqlldr中使用函数如何装载日期类型纪录装载分区表;TRAILINGNULLCOLS使用filler跳过在导入数据文本中不想进行导入的列
控制根据数据不同插入不同的表
包括文件:
日志文件;控制文件;坏记录文件;废弃记录文件(when)
控制文件:
loaddata
1说明输入文件infile后根文件名.默认扩展名为’.dat’
infile=’accounts’
用单引号’括起文件名accounts.dat
2处理选项discardfilebadfile
loaddata
infile‘accounts’discardfilemtidsc.recbadfilemthad.rec
3目标对象—–表
slqloader的用户必要有insert的权限.intotable开头
intotableaccount_trans
whendaybetween‘01′and‘31′
intotableaccount_nbr
whenaccount_typebetween‘aa’and‘zz’这样可以根据条件插入不同的表
4目标对象—-分区表或者某个分区
intotablesalepartition(east_data)…..
如果一次装在所有分区,可以用目标对象—-表的方法进行处理intotablesale….
5记录生成模式—Insert,Replace,Append
Insert–缺省模式,装在之前,table必须为空表;;
Replace–先删除所有记录,然后装在满足when条件的行;(需要delete的权限)
Append–表中原有记录保存,加入新的行.;;处理定长记录
loaddata
infile‘account.dat’
intotablecount_transappend
whenyear=’1990′
(account_nbrposition(01:
10)character,
dayposition(11:
12)character,
monthposition(13:
14)character,
transaction_codeposition(15:
16)character,
credit_amountposition(17:
30)character)
intotablecountreplace
whenyear>’1990′
(account_nbrposition(01:
10)character,
dayposition(11:
12)character,
monthposition(13:
14)character,
transaction_codeposition(15:
16)character,
credit_amountposition(17:
30)character)处理变长记录(从access到oracle)
分隔符:
概念.在一行中将一项信息与另一项信息分离开的一个字符标记.
loaddata
infile‘customer.dat’
intotableaaappend
(customer_idcharterminatedby‘‘,
statuscharterminatedby‘‘,
dsc_classcharenclosedby‘‘,
sourcecharterminatedbywhitespace)
1>单引号分割.末尾的信息项不已逗号结束,用关键字whitespaceFIELDSTERMINATEDBYx’09′(制表符)LOADDATA
INFILE*
INTOTABLEDEPT1
REPLACE
FIELDSTERMINATEDBYX’09′
(DEPTNO,
DNAME,
LOC
)
BEGINDATA
10SalesVirginia
byx’09′遇见一个制表符.它将输出一个直也就是在制表符之间的数据
SVRMGR>hostsqlldrscott/scottcontrol=c:
control.txt
SQL*Loader:
Release8.1.7.0.0-Productionon星期六8月2421:
04:
262002
(c)Copyright2000OracleCorporation.Allrightsreserved.
达到提交点,逻辑记录计数1
SVRMGR>select*fromdept1;
DEPTNODNAMELOC
———-————–————-
10Sales
已选择1行。
使用filler跳过在导入数据文本中不想进行导入的列demo
LOADDATA
INFILE*
INTOTABLEDEPT
REPLACE
FIELDSTERMINATEDBY‘,’
(DEPTNO,
DNAME“upper(:
dname)”,
LOC“upper(:
loc)”,
LAST_UPDATEDdate‘dd/mm/yyyy’
)
BEGINDATA
10,Sales,Virginia,1/5/2000
20,Accounting,Virginia,21/6/1999
30,Consulting,Virginia,5/1/2000
40,Finance,Virginia,15/3/2001ucanseeupperfunctions
sqlldrisatoolthatcanparseinputvariablesandform.itsinsertsqlusingbindvalues.
likenormalcontrolfile
FIELDSTERMINATEDBY‘,’
(DEPTNO,
DNAME,
LOC,
LAST_UPDATEDdate
)
oracle’ssqlldrchangeitequalinsertintotablevalues(:
deptno,:
dname,:
loc,:
last_updated);
whenloaddatasqlldrparseeachrecordrowandbindvariables
onceparseelseexecute!
solike
(DEPTNO,
DNAME“upper(:
dname)”,
LOC“upper(:
loc)”,
LAST_UPDATEDdate‘dd/mm/yyyy’
)
sql:
insertintotablevalues(:
deptno,upper(name),upper(:
loc),:
last_updated)
the”LAST_UPDATEDdate‘dd/mm/yyyy’”insidedate‘dd/mm/yyyy’isonlythevariable’sdatatypenotfunctions
ucanaslousefunctionto_date()thenitdeferenceSVRMGR>hostsqlldrscott/scottcontrol=control.txt
SQL*Loader:
Release8.1.7.0.0-Productionon星期日8月2500:
46:
042002
(c)Copyright2000OracleCorporation.Allrightsreserved.
达到提交点,逻辑记录计数4
SVRMGR>select*fromdept1;
DEPTNODNAMELOCLAST_UPDA
———-————–————-———
10SALESVIRGINIA01-5月-0
20ACCOUNTINGVIRGINIA21-6月-9
30CONSULTINGVIRGINIA05-1月-0
40FINANCEVIRGINIA15-3月-0
已选择4行。
TRAILINGNULLCOLSmycomputejustdownilosesomearticleyetnotbeensubmit
iamsolazynotwanttorepeatjustgoontopic
abouttrailingnullcols
seethecontrolfilejustTRAILINGNULLCOlsthepurposeofoursqlldrisexplicit.wewanttoloadentire_lineintotablebutitdoesn’texistinBEGINDATAsegements.
sooracleprovideaflagTRAILINGNULLCOLSIFUDON’TUSEITALLROWSWILLBEDISCARDINTODISCARDFILEIFUappointitushoudtrywhatisaidinnousingTRAILINGNULLCOLSmodeLOADDATA
INFILE*
INTOTABLEDEPT
REPLACE
FIELDSTERMINATEDBY‘,’
TRAILINGNULLCOLS
(DEPTNO,
DNAME“upper(:
dname)”,
LOC“upper(:
loc)”,
LAST_UPDATEDdate‘dd/mm/yyyy’,
ENTIRE_LINE“:
deptno||:
dname||:
loc||:
last_updated”
)
BEGINDATA
10,Sales,Virginia,1/5/2000
20,Accounting,Virginia,21/6/1999
30,Consulting,Virginia,5/1/2000
40,Finance,Virginia,15/3/2001let’sgoon
TRAILINGNULLCOLSforutoappointthelastcolumnavalue“NULL”soinbegindataitform.anoexistcolumnwithvaluenull
doit
SVRMGR>select*fromdept1;
DEPTNODNAMELOCLAST_UPDAENTIRE_LINE
———-————–————-—————————————
10SALESVIRGINIA01-5月-010SalesVirginia1/5/2000
40FINANCEVIRGINIA15-3月-040FinanceVirginia15/3/2001
20ACCOUNTINGVIRGINIA21-6月-920AccountingVirginia21/6/1999
30CONSULTINGVIRGINIA05-1月-030ConsultingVirginia5/1/2000
已选择4行。
SVRMGR>sqlldrwithfunctionispowerfulmagicpowerfunctionCASEWhen…..ENDrelationdiscardfile
justprovideacontrolffile
lazytodoit
———————————————–
LOADDATA
INFILE*
INTOTABLEDEPT
REPLACE
FIELDSTERMINATEDBY‘,’
TRAILINGNULLCOLS
(DEPTNO,
DNAME“upper(:
dname)”,
LOC“upper(:
loc)”,
LAST_UPDATED“casewhenlength(:
last_updated)<=10
thento_date(:
last_updated,’dd/mm/yyyy’)
elseto_date(:
last_updated,’dd/mm/yyyyhh24:
mi:
ss’)
end”
)
BEGINDATA
10,Sales,Virginia,1/5/200012:
03:
03
20,Accounting,Virginia,21/6/1999
30,Consulting,Virginia,5/1/200001:
23:
00
40,Finance,Virginia,15/3/2001sometimescustomergiveourdata.txtdateformataretoodifferentsowehaveablilitytocreateownfunctions
BEGINDATA
10,Sales,Virginia,01-april-2001
20,Accounting,Virginia,13/04/2001
30,Consulting,Virginia,14/04/200112:
02:
02
40,Finance,Virginia,987268297
50,Finance,Virginia,02-apr-2001
60,Finance,Virginia,NotadateicopyagoodfucnitonfromTOM
createorreplace
functionmy_to_date(p_stringinvarchar2)returndate
as
typefmtArrayistableofvarchar2(25);
l_fmtsfmtArray:
=fmtArray(‘dd-mon-yyyy’,‘dd-month-yyyy’,
‘dd/mm/yyyy’,
‘dd/mm/yyyyhh24:
mi:
ss’);
l_returndate;
begin
foriin1..l_fmts.count
loop
begin
l_return:
=to_date(p_string,l_fmts(i));
exception
whenothersthennull;
end;
EXITwhenl_returnisnotnull;
endloop;
if(l_returnisnull)
then
l_return:
=
new_time(to_date(’01011970′,’ddmmyyyy’)+1/24/60/60*
p_string,‘GMT’,‘EST’);
endif;
returnl_return;
end;
/useofitifotherformatitwouldinbadfilewekanreloadit使用sqlldr应该注意的问题1不能选择使用哪个回滚段
装载的时候使用replace来slqldr时候在装载之前,它会发出delete命令这样将产生大量的回滚.为了实现这个操作你可能想要指定sqlldr使用一个特定的回滚段你必须保证任何一个回滚段有足够的长度来容纳delete或者使用truncate选项由于insert并没有产生过多的回滚,因为它只写rowidintoredo理解没有问题吧?
?
2truncate选项为truncatetabletreusestorageSQLLDR默认输入流为数据类型为CHAR长度为255所以当begindatasection里面的输入流长于255的时候会报错的
应该是RecordNRejectedEorrforcolumnn
fieldindatafileexceedmaxlengthsqlldr希望你输入小于255字节或更少字节的数据,而获得的比这要多,解决的方法是在控制文件中只是单纯地使用char(N)n是可以包括你输入列地最大长度比方说loadlong类型地时候可以输入char(10000)^_^就到这里大家如果发现有什么bug请贴出来thxLOADDATA
INFILE*
INTOTABLEDEPT
REPLACE
FIELDSTERMINATEDBY‘,’OPTIONALLYENCLOSEDBY‘”‘
(DEPTNO,
FILLER_1FILLER,//seeitfiller
DNAME,
LOC
)
BEGINDATA
20,SomethingNotToBeLoaded,Accounting,”Virginia,USA”
当装载数据时候需要在输入记录中跳过各种不同的列是非常普通的例如你想装入1.3.5列跳过2.4列可以利用filler
它可以让我们在数据流里面指定一个列不把他放到数据库中
SVRMGR>hostsqlldrscott/scottcontrol=c:
control.txt
SQL*Loader:
Release8.1.7.0.0-Productionon星期六8月2421:
16:
522002
(c)Copyright2000OracleCorporation.Allrightsreserved.
达到提交点,逻辑记录计数1
SVRMGR>select*fromdept1;
DEPTNODNAMELOC
———-————–————-
20AccountingVirginia,USA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CTL 文件 用法