oracle存儲(chǔ)過(guò)程超詳細(xì)使用手冊(cè)_第1頁(yè)
oracle存儲(chǔ)過(guò)程超詳細(xì)使用手冊(cè)_第2頁(yè)
oracle存儲(chǔ)過(guò)程超詳細(xì)使用手冊(cè)_第3頁(yè)
oracle存儲(chǔ)過(guò)程超詳細(xì)使用手冊(cè)_第4頁(yè)
oracle存儲(chǔ)過(guò)程超詳細(xì)使用手冊(cè)_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 HYPERLINK Oraclle存儲(chǔ)過(guò)過(guò)程總結(jié)1、創(chuàng)建存存儲(chǔ)過(guò)程creatte orr repplacee prooceduure ttest(var_namee_1 iin tyype,vvar_nname_2 ouut tyype) as-聲明變變量(變量量名 變量量類型)beginn-存儲(chǔ)過(guò)過(guò)程的執(zhí)行行體end ttest;打印出輸入入的時(shí)間信信息E.g:creatte orr repplacee prooceduure ttest(workkDatee in Datee) issbeginndbms_outpput.pputliine(TThe iinputt datte iss:

2、|tto_daate(wworkDDate, yyyyy-mmm-dd);end ttest;2、變量賦賦值變量名 := 值;E.g:creatte orr repplacee prooceduure ttest(workkDatee in Datee) issx nummber(4,2);begiinx := 1;end ttest;3、判斷語(yǔ)語(yǔ)句:if 比較較式 thhen bbeginn endd; ennd iff;E.gcreatte orr repplacee prooceduure ttest(x inn nummber) isbeginniif x 0 tthenbegiinx

3、x := 0 - x;eend;eend iif;iif x = 0 thennbeeginxx: = 1;eend;eend iif;end ttest;4、Forr 循環(huán)For . iin . LOOOP-執(zhí)行語(yǔ)語(yǔ)句end LLOOP;(1)循環(huán)環(huán)遍歷游標(biāo)標(biāo)creatte orr repplacee prooceduure ttest() assCursoor cuursorr is seleect nname fromm stuudentt; name varcchar(20);beginnfor nname in ccursoor LOOOPbeginndbmss_outtput.pu

4、tlline(namee);end;end LLOOP;end ttest;(2)循環(huán)環(huán)遍歷數(shù)組組creaate oor reeplacce prroceddure testt(varrArraay inn myPPackaage.TTestAArrayy) ass-(輸入入?yún)?shù)vaarArrray 是是自定義的的數(shù)組類型型,定義方方式見(jiàn)標(biāo)題題6)i nummber;beginni := 1; -存儲(chǔ)儲(chǔ)過(guò)程數(shù)組組是起始位位置是從11開(kāi)始的,與與javaa、C、CC+等語(yǔ)語(yǔ)言不同。因?yàn)樵贠Oraclle中本是是沒(méi)有數(shù)組組的概念的的,數(shù)組其其實(shí)就是一一張-表(TTablee),每個(gè)個(gè)數(shù)組元素素就是

5、表中中的一個(gè)記記錄,所以以遍歷數(shù)組組時(shí)就相當(dāng)當(dāng)于從表中中的第一條條記錄開(kāi)始始遍歷for ii in 1.vvarArrray.counnt LOOOPdbms_outpput.pputliine(TThe NNo. | ii |rrecorrd inn varrArraay iss: |vaarArrray(ii);end LOOPP;end ttest;5、Whiile 循循環(huán)whilee 條件語(yǔ)語(yǔ)句 LOOOPbeginnend;end LLOOP;E.gcreatte orr repplacee prooceduure ttest(i inn nummber) asbeginnwhile

6、e i 10 LOOPPbeginni:= i + 1;end;end LLOOP;end testt;6、數(shù)組首先明確一一個(gè)概念:Oraccle中本本是沒(méi)有數(shù)數(shù)組的概念念的,數(shù)組組其實(shí)就是是一張表(Tablle),每每個(gè)數(shù)組元元素就是表表中的一個(gè)個(gè)記錄。使用數(shù)組時(shí)時(shí),用戶可可以使用OOraclle已經(jīng)定定義好的數(shù)數(shù)組類型,或或可根據(jù)自自己的需要要定義數(shù)組組類型。(1)使用用Oraccle自帶帶的數(shù)組類類型x arrray; -使用用時(shí)需要需需要進(jìn)行初初始化e.g:creatte orr repplacee prooceduure ttest(y ouut arrray) isx arrray

7、;begiinx := new arraay();y := x;end ttest;(2)自定定義的數(shù)組組類型 (自定義數(shù)數(shù)據(jù)類型時(shí)時(shí),建議通通過(guò)創(chuàng)建PPackaage的方方式實(shí)現(xiàn),以以便于管理理)E.g (自定義使使用參見(jiàn)標(biāo)標(biāo)題4.22) crreatee or repllace packkage myPaackagge iss - Publlic ttype decllarattionss ttype infoo is recoord( namee varrcharr(20), y numbber); typpe TeestArrray is ttablee of infoo inddex

8、 bby biinaryy_inttegerr; -此處處聲明了一一個(gè)TesstArrray的類類型數(shù)據(jù),其其實(shí)其為一一張存儲(chǔ)IInfo數(shù)數(shù)據(jù)類型的的Tablle而已,及及TesttArraay 就是是一張表,有有兩個(gè)字段段,一個(gè)是是name,一一個(gè)是y。需要注意意的是此處處使用了IIndexx by binaary_iintegger 編編制該Taable的的索引項(xiàng),也也可以不寫寫,直接寫寫成:tyype TTestAArrayy istablee of infoo,如果不不寫的話使使用數(shù)組時(shí)時(shí)就需要進(jìn)進(jìn)行初始化化:varrArraay myyPackkage.TesttArraay; vv

9、arArrray := nnew mmyPacckagee.TesstArrray();end TTestAArrayy;7.游標(biāo)的的使用 Oraclle中Cuursorr是非常有有用的,用用于遍歷臨臨時(shí)表中的的查詢結(jié)果果。其相關(guān)關(guān)方法和屬屬性也很多多,現(xiàn)僅就就常用的用用法做一二二介紹:(1)Cuursorr型游標(biāo)(不能用于于參數(shù)傳遞遞)creatte orr repplacee prooceduure ttest() isscusorr_1 CCursoor iss sellect std_namee froom sttudennt whhere .; -Currsor的的使用方式式1 cu

10、rssor_22 Currsor;beginnselecct cllass_namee intto cuursorr_2 ffrom classs whhere .; -Curssor的使使用方式22可使用Foor x in ccursoor LOOOP . end LOOPP; 來(lái)實(shí)實(shí)現(xiàn)對(duì)Cuursorr的遍歷end ttest;(2)SYYS_REEFCURRSOR型型游標(biāo),該該游標(biāo)是OOraclle以預(yù)先先定義的游游標(biāo),可作作出參數(shù)進(jìn)進(jìn)行傳遞creatte orr repplacee prooceduure ttest(rsCuursorr outt SYSS_REFFCURSSOR)

11、iscursoor SYYS_REEFCURRSOR; namme vaarhcaar(200);beginnOPEN curssor FFOR sselecct naame ffrom studdent wherre . -SYS_REFCCURSOOR只能通通過(guò)OPEEN方法來(lái)來(lái)打開(kāi)和賦賦值LOOPfetcch cuursorr intto naame-SSYS_RREFCUURSORR只能通過(guò)過(guò)fetcch innto來(lái)打打開(kāi)和遍歷歷 exiit whhen ccursoor%NOOTFOUUND; -SSYS_RREFCUURSORR中可使用用三個(gè)狀態(tài)態(tài)屬性: -%NOTFFOUNDD

12、(未找到到記錄信息息) %FFOUNDD(找到記記錄信息) -%ROWWCOUNNT(然后后當(dāng)前游標(biāo)標(biāo)所指向的的行位置)dbmss_outtput.putlline(namee);end LLOOP;rsCurrsor := ccursoor;end ttest;下面寫一個(gè)個(gè)簡(jiǎn)單的例例子來(lái)對(duì)以以上所說(shuō)的的存儲(chǔ)過(guò)程程的用法做做一個(gè)應(yīng)用用:現(xiàn)假設(shè)存在在兩張表,一一張是學(xué)生生成績(jī)表(studdnet),字段為為:stddId,mmath,artiicle,langguagee,mussic,ssportt,tottal,aaveraage,sstep 一張張是學(xué)生課課外成績(jī)表表(outt_schho

13、ol),字段為為:stddId,pparcttice,commment通過(guò)存儲(chǔ)過(guò)過(guò)程自動(dòng)計(jì)計(jì)算出每位位學(xué)生的總總成績(jī)和平平均成績(jī),同同時(shí),如果果學(xué)生在課課外課程中中獲得的評(píng)評(píng)價(jià)為A,就就在總成績(jī)績(jī)上加200分。creatte orr repplacee prooceduure aautoccompuuter(stepp in numbber) isrsCurrsor SYS_REFCCURSOOR;commeentArrray myPaackagge.myyArraay;math numbber;articcle nnumbeer;languuage numbber;musicc nummbe

14、r;sportt nummber;totall nummber;averaage nnumbeer;stdIdd varrcharr(30);recorrd myyPackkage.stdIInfo;i nummber;beginni := 1;get_ccommeent(ccommeentArrray); -調(diào)用名為為get_commment()的存儲(chǔ)儲(chǔ)過(guò)程獲取取學(xué)生課外外評(píng)分信息息OPEN rsCuursorr forr sellect stdIId,maath,aarticcle,llanguuage,musiic,spport fromm stuudentt t wwheree t.s

15、step = sttep;LOOPfetchh rsCCursoor innto sstdIdd,matth,arrticlle,laanguaage,mmusicc,spoort; exitt wheen rssCurssor%NNOTFOOUND;totall := mathh + aarticcle + lannguagge + musiic + sporrt;for ii in 1.ccommeentArrray.counnt LOOOPrecoord := coommenntArrray(ii);if sttdId = reecordd.stddId tthenbegiinif rr

16、ecorrd.coommennt = &apoos;A&aposs; thhenbeggintotaal := tottal + 20;goo to nextt; -使用goo to跳跳出forr循環(huán) endd;end iif;end;end iif;end LLOOP; aveeragee := totaal / 5;updaate sstudeent tt sett t.ttotall=tottal aand tt.aveeragee = aaveraage wwheree t.sstdIdd = sstdIdd;end LLOOP;end;end aautoccompuuter;-取得學(xué)

17、學(xué)生評(píng)論信信息的存儲(chǔ)儲(chǔ)過(guò)程creatte orr repplacee prooceduure gget_ccommeent(ccommeentArrray out myPaackagge.myyArraay) iisrs SYYS_REEFCURRSOR;recorrd myyPackkage.stdIInfo;stdIdd varrcharr(30);commeent vvarchhar(11);i nummber;beginnopen rs ffor sselecct sttdId,commment fromm outt_schhooli := 1;LOOPfetcch rss intto

18、 sttdId,commment; exiit whhen rrs%NOOTFOUUND;recorrd.sttdId := sstdIdd;recoord.ccommeent := coommennt;recommmenttArraay(i) := recoord;i:=i + 1;end LLOOP;end gget_ccommeent;-定義數(shù)數(shù)組類型mmyArrraycreatte orr repplacee pacckagee myPPackaage iis beegintype stdIInfo is rrecorrd(sttdId varcchar(30),commment va

19、rcchar(1);type myArrray is ttablee of stdIInfo indeex byy binnary_inteeger;end mmyPacckagee;項(xiàng)目中有涉涉及存儲(chǔ)過(guò)過(guò)程對(duì)字符符串的處理理,所以就就將在網(wǎng)上上查找到的的資料匯總總,做一個(gè)個(gè)信息拼接接式的總結(jié)結(jié)。以下信息均均來(lái)自互聯(lián)聯(lián)網(wǎng),貼出出來(lái)一則自自己保存以以待以后使使用,一則則供大家分分享。字符函數(shù)返回字字符值這些函數(shù)全全都接收的的是字符族族類型的參參數(shù)(CHHR除外)并且返回回字符值.除了特別說(shuō)說(shuō)明的之外外,這些函函數(shù)大部分分返回VAARCHAAR2類型型的數(shù)值.字符函數(shù)的的返回類型型所受的限限制和基

20、本本數(shù)據(jù)庫(kù)類類型所受的的限制是相相同的。字符型變量量存儲(chǔ)的最最大值:VARCCHAR22數(shù)值被限限制為20000字符符(ORAACLE 8中為44000字字符)CHARR數(shù)值被限限制為2555字符(在ORAACLE88中是20000)longg類型為22GBClobb類型為44GB1、CHRR語(yǔ)法: chr(x)功能:返回回在數(shù)據(jù)庫(kù)庫(kù)字符集中中與X擁有有等價(jià)數(shù)值值的字符。CHR和和ASCIII是一對(duì)對(duì)反函數(shù)。經(jīng)過(guò)CHHR轉(zhuǎn)換后后的字符再再經(jīng)過(guò)ASSCII轉(zhuǎn)轉(zhuǎn)換又得到到了原來(lái)的的字符。使用位置:過(guò)程性語(yǔ)語(yǔ)句和SQQL語(yǔ)句。2、CONNCAT語(yǔ)法: CCONCAAT(sttringg1,sttri

21、ngg2)功能:返回回striing1,并并且在后面面連接sttringg2。使用位置:過(guò)程性語(yǔ)語(yǔ)句和SQQL語(yǔ)句。3、INIITCAPP語(yǔ)法:INNITCAAP(sttringg)功能:返回回字符串的的每個(gè)單詞詞的第一個(gè)個(gè)字母大寫寫而單詞中中的其他字字母小寫的的striing。單單詞是用.空格或給給字母數(shù)字字字符進(jìn)行行分隔。不不是字母的的字符不變動(dòng)動(dòng)。使用位置:過(guò)程性語(yǔ)語(yǔ)句和SQQL語(yǔ)句。4、LTRRIM語(yǔ)法:LTTRIM(sstrinng1,sstrinng2)功能:返回回刪除從左左邊算起出出現(xiàn)在sttringg2中的字字符的sttringg1。Sttringg2被缺省省設(shè)置為單單個(gè)的空格

22、格。數(shù)據(jù)庫(kù)庫(kù)將掃描sstrinng1,從從最左邊開(kāi)開(kāi)始。當(dāng)遇到不在sstrinng2中的的第一個(gè)字字符,結(jié)果果就被返回回了。LTTRIM的的行為方式式與RTRRIM很相相似。使用位置:過(guò)程性語(yǔ)語(yǔ)句和SQQL語(yǔ)句。5、NLSS_INIITCAPP語(yǔ)法:NLLS_INNITCAAP(sttringg,nllsparrams)功能:返回回字符串每每個(gè)單詞第第一個(gè)字母母大寫而單單詞中的其其他字母小小寫的sttringg,nlssparaams指定了不同同于該會(huì)話話缺省值的的不同排序序序列。如如果不指定定參數(shù),則則功能和IINITCCAP相同同。Nlssparaams可以以使用的形形式是:NLS_SOR

23、TT=sorrt這里sorrt制訂了了一個(gè)語(yǔ)言言排序序列列。使用位置:過(guò)程性語(yǔ)語(yǔ)句和SQQL語(yǔ)句。6、NLSS_LOWWER語(yǔ)法:NLLS_LOOWER(sstrinng,nnlspaaramss)功能:返回回字符串中中的所有字字母都是小小寫形式的的striing。不不是字母的的字符不變變。 Nlssparaams參數(shù)數(shù)的形式與與用途和NNLS_IINITCCAP中的的nlspparamms參數(shù)是是相同的。如果nllsparrams沒(méi)沒(méi)有被包含含,那么NNLS_LLOWERR所作的處處理和LOWERR相同。使用位置;過(guò)程性語(yǔ)語(yǔ)句和SQQL語(yǔ)句。7、NLSS_UPPPER語(yǔ)法:nlls_uppp

24、er(sstrinng,nnlspaaramss)功能:返回回字符串中中的所有字字母都是大大寫的形式式的strring。不是字母母的字符不不變。nllsparrams參參數(shù)的形式式與用途和和NLS_INITTCAP中中的相同。如果沒(méi)有設(shè)定參參數(shù),則NNLS_UUPPERR功能和UUPPERR相同。使用位置:過(guò)程性語(yǔ)語(yǔ)句和SQQL語(yǔ)句。8、REPPLACEE語(yǔ)法:REEPLACCE(sttringg,seaarch_str,repplacee_strr)功能:把sstrinng中的所所有的子字字符串seearchh_strr用可選的的repllace_str替替換,如果果沒(méi)有指定定repllac

25、e_str,所所有的sttringg中的子字字符串searcch_sttr都將被被刪除。RREPLAACE是TTRANSSLATEE所提供的的功能的一一個(gè)子集。使用位置:過(guò)程性語(yǔ)語(yǔ)句和SQQL語(yǔ)句。9、RPAAD語(yǔ)法:RPPAD(sstrinng1,xx,sttringg2)功能:返回回在X字符符長(zhǎng)度的位位置上插入入一個(gè)sttringg2中的字字符的sttringg1。如果果striing2的的長(zhǎng)度要比比X字符少少,就按照照需要進(jìn)行行復(fù)制。如如果strring22多于X字符符,則僅sstrinng1前面面的X各字字符被使用用。如果沒(méi)沒(méi)有指定sstrinng2,那那么使用空空格進(jìn)行填填充。X是是

26、使用顯示示長(zhǎng)度可以以比字符串串的實(shí)際長(zhǎng)長(zhǎng)度要長(zhǎng)。RPPAD的行行為方式與與LPADD很相似,除除了它是在在右邊而不不是在左邊邊進(jìn)行填充充。使用位置:過(guò)程性語(yǔ)語(yǔ)句和SQQL語(yǔ)句。10、RTTRIM語(yǔ)法: RTRIIM(sttringg1,striing2)功能: 返回刪除除從右邊算算起出現(xiàn)在在striing1中中出現(xiàn)的字字符strring22. sttringg2被缺省省設(shè)置為單單個(gè)的空格格.數(shù)據(jù)庫(kù)庫(kù)將掃描sstrinng1,從從右邊開(kāi)始始.當(dāng)遇到不在sttringg2中的第第一個(gè)字符符,結(jié)果就就被返回了了RTRIIM的行為為方式與LLTRIMM很相似.使用位置:過(guò)程性語(yǔ)語(yǔ)句和SQQL語(yǔ)句。11

27、、SOOUNDEEX語(yǔ)法: SOUNNDEX(sstrinng)功能: 返回sttringg的聲音表表示形式.這對(duì)于比比較兩個(gè)拼拼寫不同但但是發(fā)音類類似的單詞詞而言很有有幫助.使用位置:過(guò)程性語(yǔ)語(yǔ)句和SQQL語(yǔ)句。12、SUUBSTRR語(yǔ)法: SUBSSTR(sstrinng,a,b)功能: 返回從字字母為值aa開(kāi)始b個(gè)個(gè)字符長(zhǎng)的的striing的一一個(gè)子字符符串.如果果a是0,那么它就就被認(rèn)為從從第一個(gè)字字符開(kāi)始.如果是正正數(shù),返回回字符是從從左邊向右邊進(jìn)進(jìn)行計(jì)算的的.如果bb是負(fù)數(shù),那么返回回的字符是是從strring的的末尾開(kāi)始始從右向左左進(jìn)行計(jì)算算的.如果果b不存在在,那么它它將缺省的

28、的設(shè)置為整整個(gè)字符串.如果bb小于1,那么將返返回NULLL.如果果a或b使使用了浮點(diǎn)點(diǎn)數(shù),那么么該數(shù)值將將在處理進(jìn)進(jìn)行以前首首先被卻為為一個(gè)整數(shù)數(shù).使用位置:過(guò)程性語(yǔ)語(yǔ)句和SQQL語(yǔ)句。13、TRRANSLLATE 語(yǔ)法法: TTRANSSLATEE(strring,fromm_strr,to_str) 功能能: 返返回將所出出現(xiàn)的frrom_sstr中的的每個(gè)字符符替換為tto_sttr中的相相應(yīng)字符以以后的sttringg. TRRANSLLATE是是REPLLACE所所提供的功功能的一個(gè)個(gè)超集.如果froom_sttr比too_strr長(zhǎng),那么么在froom_sttr中而不不在to_s

29、tr中中而外的字字符將從sstrinng中被刪刪除,因?yàn)闉樗鼈儧](méi)有有相應(yīng)的替替換字符. to_str不不能為空.Oraccle把空空字符串認(rèn)認(rèn)為是NUULL,并并且如果TTRANSSLATEE中的任何何參數(shù)為NNULL,那么結(jié)果果也是NUULL.使用位置:過(guò)程性語(yǔ)語(yǔ)句和SQQL語(yǔ)句。14、UPPPER語(yǔ)法: UUPPERR(strring)功能: 返返回大寫的的striing.不不是字母的的字符不變變.如果sstrinng是CHHAR數(shù)據(jù)據(jù)類型的,那么結(jié)果果也是CHHAR類型型的.如果果striing是VVARCHHAR2類類型的,那那么結(jié)果也是VVARCHHAR2類類型的.使用位置: 過(guò)程性

30、性語(yǔ)句和SSQL語(yǔ)句句。字符函數(shù)返回?cái)?shù)數(shù)字這些函數(shù)接接受字符參參數(shù)回?cái)?shù)字字結(jié)果.參參數(shù)可以是是CHARR或者是VVARCHHAR2類類型的.盡盡管實(shí)際下下許多結(jié)果果都是整數(shù)數(shù)值,但是是返回結(jié)果果都是簡(jiǎn)單單的NUMMBER類型的,沒(méi)沒(méi)有定義任任何的精度度或刻度范范圍.16、ASSCII語(yǔ)法: ASCIII(sttringg)功能: 數(shù)數(shù)據(jù)庫(kù)字符符集返回sstrinng的第一一個(gè)字節(jié)的的十進(jìn)制表表示.請(qǐng)注注意該函數(shù)數(shù)仍然稱作作為ASCCII.盡盡管許多字字符集不是是7位ASSCII.CHR和和ASCIII是互為為相反的函數(shù)數(shù).CHRR得到給定定字符編碼碼的響應(yīng)字字符. AASCIII得到給定定字符

31、的字字符編碼.使用位置: 過(guò)程性性語(yǔ)句和SSQL語(yǔ)句句。17、INNSTR語(yǔ)法: INSTTR(sttringg1, sstrinng2aa,b)功能: 得到在sstrinng1中包包含strring22的位置. strring11時(shí)從左邊邊開(kāi)始檢查查的,開(kāi)始始的位置為為a,如果果a是一個(gè)個(gè)負(fù)數(shù),那那么strring11是從右邊邊開(kāi)始進(jìn)行行掃描的.第第b次出現(xiàn)現(xiàn)的位置將將被返回. a和bb都缺省設(shè)設(shè)置為1,這將會(huì)返返回在sttringg1中第一一次出現(xiàn)sstrinng2的位位置.如果果striing2在在a和b的的規(guī)定下沒(méi)沒(méi)有找到,那么么返回0.位置的計(jì)計(jì)算是相對(duì)對(duì)于strring11的開(kāi)始位

32、位置的,不不管a和bb的取值是是多少.使用位置: 過(guò)程性性語(yǔ)句和SSQL語(yǔ)句句。18、INNSTRBB語(yǔ)法: INSTTRB(sstrinng1, striing2a,bb)功能: 和INSSTR相同同,只是操操作的對(duì)參參數(shù)字符使使用的位置置的是字節(jié)節(jié).使用位置: 過(guò)程性性語(yǔ)句和SSQL語(yǔ)句句。19、LEENGTHH語(yǔ)法: LENGGTH(sstrinng)功能: 返回sttringg的字節(jié)單單位的長(zhǎng)度度.CHAAR數(shù)值是是填充空格格類型的,如果sttringg由數(shù)據(jù)類類型CHAAR,它的的結(jié)尾的空空格都被計(jì)計(jì)算到字符符串長(zhǎng)度中中間.如果strring是是NULLL,返回結(jié)結(jié)果是NUULL,而

33、而不是0.使用位置: 過(guò)程性性語(yǔ)句和SSQL語(yǔ)句句。20、LEENGTHHB語(yǔ)法: LENGGTHB(sstrinng)功能: 返回以字字節(jié)為單位位的strring的的長(zhǎng)度.對(duì)對(duì)于單字節(jié)節(jié)字符集LLENGTTHB和LLENGTTH是一樣樣的.使用位置: 過(guò)程性性語(yǔ)句和SSQL語(yǔ)句句。21、NLLSSORRT語(yǔ)法: NNLSSOORT(sstrinng,nnlspaaramss)功能: 得得到用于排排序strring的的字符串字字節(jié).所有有的數(shù)值都都被轉(zhuǎn)換為為字節(jié)字符符串,這樣樣在不同數(shù)數(shù)據(jù)庫(kù)之間間就保持了了一致性. Nlssparaams的作作用和NLS_IINITCCAP中的的相同.如如果忽

34、略參參數(shù),會(huì)話話使用缺省省排序.使用位置: 過(guò)程性性語(yǔ)句和SSQL語(yǔ)句句。oraclle 存儲(chǔ)儲(chǔ)過(guò)程的基基本語(yǔ)法1.基本結(jié)結(jié)構(gòu) CREATTE ORR REPPLACEE PROOCEDUURE 存存儲(chǔ)過(guò)程名名字( 參參數(shù)1 IIN NUUMBERR, 參參數(shù)2 IIN NUUMBERR) IS變量1 IINTEGGER :=0;變量2 DDATE;BEGINNEND 存存儲(chǔ)過(guò)程名名字2.SELLECT INTOO STAATEMEENT 將seelectt查詢的結(jié)結(jié)果存入到到變量中,可可以同時(shí)將將多個(gè)列存存儲(chǔ)多個(gè)變變量中,必必須有一條條 記錄,否否則拋出異異常(如果果沒(méi)有記錄錄拋出NOO_D

35、ATTA_FOOUND) 例子: BEGGIN SELLECT col11,coll2 innto 變變量1,變變量2 FFROM typeestruuct wwheree xxxx; EXCCEPTIION WHEEN NOO_DATTA_FOOUND THENN xxxxx; ENDD; .3.IF 判斷 IF V_TEEST=11 THEEN BBEGINN doo sommethiing EEND; ENDD IF;4.whiile 循循環(huán) WHIILE VV_TESST=1 LOOPP BEGGINXXXXX ENDD; ENDD LOOOP;5.變量賦賦值 V_TTEST := 1

36、123;6.用foor inn 使用ccursoor . IS CURRSOR cur IS SSELECCT * FROMM xxxx; BEGGINFOR cur_resuult iin cuur LOOOPBEGGINV_SUM :=cuur_reesultt.列名11+curr_ressult.列名2ENDD;END LOOPP; ENDD;7.帶參數(shù)數(shù)的currsor CURRSOR C_USSER(CC_ID NUMBBER) IS SSELECCT NAAME FFROM USERR WHEERE TTYPEIID=C_ID; OPEEN C_USERR(變量值值); LOOOP

37、FETCCH C_USERR INTTO V_NAMEE;EXITT FETTCH CC_USEER%NOOTFOUUND; ddo soomethhing ENDD LOOOP; CLOOSE CC_USEER;8.用pll/sqll devvelopper ddebugg 連接數(shù)數(shù)據(jù)庫(kù)后建建立一個(gè)TTest WINDDOW 在窗口口輸入調(diào)用用SP的代代碼,F99開(kāi)始deebug,CTRLL+N單步步調(diào)試關(guān)于oraacle存存儲(chǔ)過(guò)程的的若干問(wèn)題題備忘1.在orraclee中,數(shù)據(jù)據(jù)表別名不不能加ass,如:seleccta.appnnamefrommapppinfooa;- 正確確selec

38、cta.appnnamefrommapppinfooasa;- 錯(cuò)誤誤也許,是是怕和orraclee中的存儲(chǔ)儲(chǔ)過(guò)程中的的關(guān)鍵字aas沖突的的問(wèn)題吧2.在存儲(chǔ)儲(chǔ)過(guò)程中,sselecct某一字字段時(shí),后后面必須緊緊跟intto,如果果seleect整個(gè)個(gè)記錄,利利用游標(biāo)的的話就另當(dāng)當(dāng)別論了。sellectaf.kkeynoodeiintoknffromAPPFFOUNDDATIOONaffwheereaaf.apppid=aidandaaf.fooundaationnid=fid;-有有intoo,正確編編譯sellectaf.kkeynoodeffromAPPFFOUNDDATIOONaffwh

39、eereaaf.apppid=aidandaaf.fooundaationnid=fid;-沒(méi)沒(méi)有intto,編譯譯報(bào)錯(cuò),提提示:CoompillatioonErrror:PLS-004228:aanINNTOcclausseissexppecteedinnthiisSEELECTTstaatemeent3.在利用用to.語(yǔ)法時(shí),必必須先確保保數(shù)據(jù)庫(kù)中中有該條記記錄,否則則會(huì)報(bào)出no ddata founnd異常常。 可以以在該語(yǔ)法法之前,先先利用seelectt couunt(*) frrom 查查看數(shù)據(jù)庫(kù)庫(kù)中是否存存在該記錄錄,如果存存在,再利利用sellect.innto.4.在存儲(chǔ)儲(chǔ)過(guò)

40、程中,別別名不能和和字段名稱稱相同,否否則雖然編編譯可以通通過(guò),但在在運(yùn)行階段段會(huì)報(bào)錯(cuò)seleectkkeynoodeiintoknffromAPPFFOUNDDATIOONwhhereappiid=aidandffounddatioonid=fid;-正正確運(yùn)行selecctaff.keyynodeeintokknfrromAAPPFOOUNDAATIONNafwherreaf.aappidd=apppidandaf.ffounddatioonid=founndatiionidd;-運(yùn)運(yùn)行階段報(bào)報(bào)錯(cuò),提示示ORA-0014222:exaactffetchhretuurnsmoreethaan

41、reequesstednumbberofroows5.在存儲(chǔ)儲(chǔ)過(guò)程中,關(guān)關(guān)于出現(xiàn)nnull的的問(wèn)題假設(shè)有一個(gè)個(gè)表A,定定義如下:creattetablleA(idvaarchaar2(50)priimaryykeynotnulll,vcounntnuumberr(8)nottnulll,bidvvarchhar2(50)nottnulll-外外鍵);如果在存儲(chǔ)儲(chǔ)過(guò)程中,使使用如下語(yǔ)語(yǔ)句:selecctsuum(vccountt)inntoffcounntfrromAAwheerebbid=xxxxxxx;如果A表中中不存在bbid=xxxxxxx的的記錄,則則fcouunt=nnull(即使f

42、ccountt定義時(shí)設(shè)設(shè)置了默認(rèn)認(rèn)值,如:fcouunt nnumbeer(8):=0依依然無(wú)效,ffcounnt還是會(huì)會(huì)變成nuull),這這樣以后使使用fcoount時(shí)時(shí)就可能有有問(wèn)題,所所以在這里里最好先判判斷一下:iffccounttisnullltheenffcounnt:=00;endiif;這樣就一切切ok了。6.Hibbernaate調(diào)用用oraccle存儲(chǔ)儲(chǔ)過(guò)程tthis.pnummberMManagger.ggetHiibernnateTTempllate().exxecutte(nnewHHiberrnateeCalllbackk().ppubliicObbjecttdo

43、IInHibbernaate(SSessiionssessiion)tthrowwsHiibernnateEExcepptionn,SQQLExcceptiion.CCallaableSStateementtcs=seessioon.connnectiion().preppareCCall(caallmmodiffyappppnummber_remaain(?);ccs.seetStrring(1,ffounddatioonid);ccs.exxecutte();rreturrnnulll;);oraclle存儲(chǔ)儲(chǔ)過(guò)程語(yǔ)法法總結(jié)及練練習(xí)-1.存存儲(chǔ)過(guò)程之之ifclearr;creatte or

44、r repplacee prooceduure mmydell(in_a in iintegger)asbeginnif inn_a1100 tthendbms_outpput.pput_lline(小于1100.);elsiff in_a3011;end lloop;end;/set sserveerouttput on;beginnmydell(2);end;/-1.存存儲(chǔ)過(guò)程之之loopp2clearr;creatte orr repplacee prooceduure mmydell(in_a in iintegger)asa inttegerr;beginna:=0;whilee a

45、3300 lloopdbms_outpput.pput_lline(a);a:=a+1;end lloop;end;/set sserveerouttput on;beginnmydell(2);end;-1.存存儲(chǔ)過(guò)程之之loopp3clearr;creatte orr repplacee prooceduure mmydell(in_a in iintegger)asa inttegerr;beginnfor aa in 0.3300loopdbms_outpput.pput_lline(a);end lloop;end;/set sserveerouttput on;beginnmyde

46、ll(2);end;/clearr;selecct enname,cc:=(cassewhen commm=nulll thhen ssal*112;else (sall+commm)*112;end ccase fromm empp ordder bby saalperrsal;-clearr;creatte orr repplacee prooceduure ggetsttudenntcommmentts(i_stuudenttid iin innt,o_commmentss outt varrcharr)asexamss_satt intt;avg_mmark int;tmp_ccomm

47、eents varcchar(100);beginnselecct coount(exammid) intoo exaams_ssat ffrom studdenteexamwheree stuudenttid=ii_stuudenttid;if exxams_sat=0 thhentmp_ccommeents:=n/a-thhis sstudeent ddid nnot aattennd thhe exxam!;elseselecct avvg(maark) intoo avgg_marrk frrom sstudeentexxamwheree stuudenttid=ii_stuudent

48、tid;casewhen avg_markk50 thenn tmpp_commmentts:=veryy badd;when avg_markk60 thenn tmpp_commmentts:=bad;when avg_markk70 thenn tmpp_commmentts:=goodd;end ccase;end iif;o_commmentts:=ttmp_ccommeents;end;/set sserveerouttput on;declaarepp sttudenntexaam.coommennts%ttype;beginngetsttudenntcommmentts(8,p

49、p);dbms_outpput.pput_lline(pp);end;/-delette frrom eemp wwheree emppno66000;clearr;creatte orr repplacee prooceduure iinserrtdatta(in_nuum inn inttegerr)asmyNumm intt deffaultt 0;emp_nno emmp.emmpno%typee:=10000;beginnwhilee myNNumiin_nuum looopinserrt innto eemp vvaluees(emmp_noo,huui|myNuum,ccoder

50、r,75555,ccurreent_ddate,80000,62558,300);emp_nno:=eemp_nno+1;myNumm:=myyNum+1;end lloop;end;/set sserveerouttput on;beginninserrtdatta(100);end;/selecct * fromm empp;-clearr;selecct sttudenntnamme,avveraggeMarrk,caasewhen averrageMMark60 tthen 不及格格when averrageMMark70 tthen 考得好好when averrageMMark(se

51、lecct saal frrom eemp wwheree enaame=SMITTH);-33-selecct a.enamme,(selecct enname fromm empp b wwheree b.eempnoo=a.mmgr) as bbossnname fromm empp a;-44-selecct a.enamme frrom eemp aa wheere aa.hirredatte11500;-88-selecct enname fromm empp wheere ddeptnno=(selecct deeptnoo froom deept wwheree dnaame=

52、SALEES);-99-selecct enname fromm empp wheere ssal(selecct avvg(saal) ffrom emp);-110-selecct enname fromm empp wheere jjob=(selecct joob frrom eemp wwheree enaame=SCOTTT);-111-selecct a.enamme,a.sal fromm empp a wwheree a.ssal iin (selecct b.sal fromm empp b wwheree b.ddeptnno=300) annd a.depttno30;

53、-112-selecct enname,sal fromm empp wheere ssal(selecct maax(saal) ffrom emp wherre deeptnoo=30);-113-selecct (seleect bb.dnaame ffrom deptt b wwheree a.ddeptnno=b.depttno) as ddeptnname ,countt(depptno) as depttcounnt,avg(ssal) as ddeptaavgsaal from emp a grroup by ddeptnno; -114-selecct a.enaame,(s

54、eleect bb.dnaame ffrom deptt b wwheree b.ddeptnno=a.depttno) as ddeptnname,sal from emp a; -115-seleccta.depptno,a.dnaame,a.locc,(seleect ccountt(depptno) froom emmp b wherre b.depttno=aa.depptno grouup byy b.ddeptnno) aas deeptcoountfrom deptt a;-116-selecct joob,avvg(saal) ffrom emp grouup byy job

55、b;-117-selecct deeptnoo,minn(sall) frrom eemp wwheree jobb=MAANAGEER ggroupp by depttno;-118-selecct enname,(sall+nvll(commm,0)*122 as salppersaal frrom eemp oorderr by salppersaal;ORACLLE子句查查詢,分組組等A.同表子子查詢作為為條件a. 給出出人口多于于Russsia(俄俄國(guó))的國(guó)國(guó)家名稱 SELEECT nname FROMM bbccWHEREE poppulattion(SELEECT ppopull

56、atioon FRROM bbbcWHEREE namme=RRussiia) b.給出Indiia(印印度), Iraan(伊伊朗)所在在地區(qū)的所所有國(guó)家的的所有信息息 SELLECT * FRROM bbbcWHEREE reggion IN(SELEECT rregioon FRROM bbbcWHEREE namme INN (IIndiaa,IIran) c.給出人人均GDPP超過(guò)UUniteed Kiingdoom(英英國(guó))的歐歐洲國(guó)家. SELLECT namee FROOM bbbcWHEREE reggion=Eurrope ANDD gdpp/poppulattion (S

57、ELEECT ggdp/ppopullatioon FRROM bbbcWHEREE namme=UUniteed Kiingdoom) d.這個(gè)查查詢實(shí)際上上等同于以以下這個(gè):selecct e11.enaame ffrom emp e1,(seleect eempnoo froom emmp whhere enamme = KINNG) e2 wwheree e1.mgr = e22.emppno; 你可以用EEXISTTS寫同樣樣的查詢,你你只要把外外部查詢一一欄移到一一個(gè)像下面面這樣的子子查詢環(huán)境境中就可以以了:selecct enname fromm empp ewheree exi

58、ists (sellect 0 frrom eemp wwheree e.mmgr = emppno aand eenamee = KINGG); 當(dāng)你在一個(gè)個(gè)WHERRE子句中中寫EXIISTS時(shí)時(shí),又等于于向最優(yōu)化化傳達(dá)了這這樣一條信信息,即你你想讓外部部查詢先運(yùn)運(yùn)行,使用用每一個(gè)值值來(lái)從內(nèi)部部查詢(假假定:EXXISTSS由外而而內(nèi))中得得到一個(gè)值值。B.異表子子查詢作為為條件a.sellect * frrom sstudeentExxam wwheree stuudenttid=( sellect studdentiid frrom sstudeent wwheree namme=吳吳

59、麗麗);b.sellect * frrom sstudeentexxam wwheree stuudenttid iin (selecct sttudenntid fromm stuudentt) orrder by sstudeentidd;c.sellect * frrom sstudeent wwheree stuudenttid iin (sselecct sttudenntid fromm stuudenttexamm wheere mmark80); 3.sellect studdenteexam.markk,stuudenttexamm.stuudenttid aas seeid

60、, studdent.studdentiid,sttudennt.naame ffrom studdenteexam,studdent wherre sttudennt.sttudenntid=studdenteexam.studdentiid;過(guò)濾分組:順序?yàn)橄确址纸M,再過(guò)過(guò)濾,最后后進(jìn)行統(tǒng)計(jì)計(jì)(實(shí)際值值).selecct sttudenntid,counnt(*) as highhpassses ffrom studdenteexamwwheree marrk700grouup byy stuudenttid;假使我們不不想通過(guò)數(shù)數(shù)據(jù)表中的的實(shí)際值,而是通過(guò)過(guò)聚合函數(shù)數(shù)的結(jié)果來(lái)來(lái)過(guò)過(guò)濾查查

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論