第十二章-控制語(yǔ)句_第1頁(yè)
第十二章-控制語(yǔ)句_第2頁(yè)
第十二章-控制語(yǔ)句_第3頁(yè)
第十二章-控制語(yǔ)句_第4頁(yè)
第十二章-控制語(yǔ)句_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第十二章控制語(yǔ)句知識(shí)點(diǎn)回顧理解PL/SQL功能和特點(diǎn)了解數(shù)據(jù)類型及其用法理解邏輯比較掌握錯(cuò)誤處理2本章目標(biāo)順序結(jié)構(gòu)控制語(yǔ)句選擇結(jié)構(gòu)控制語(yǔ)句if語(yǔ)句Case語(yǔ)句循環(huán)結(jié)構(gòu)控制語(yǔ)句基本loop循環(huán)while循環(huán)for循環(huán)3流程控制順序控制用于按順序執(zhí)行語(yǔ)句可以使用選擇語(yǔ)句和循環(huán)來更改PL/SQL塊的可執(zhí)行部分中的語(yǔ)句的執(zhí)行順序。4選擇結(jié)構(gòu)—IF語(yǔ)句如果一個(gè)條件為TRUE,那么IF語(yǔ)句將決定是否應(yīng)該執(zhí)行一個(gè)語(yǔ)句。IF語(yǔ)法結(jié)構(gòu)IFconditionTHEN statements;[ELSIFconditionTHEN statements;][ELSE statements;]

ENDIF;5執(zhí)行控制--IF語(yǔ)句說明:在IF語(yǔ)句中,唯一一個(gè)必需的子句是IF子句。IF子句指出了要想執(zhí)行THEN關(guān)鍵字之后列出的語(yǔ)句所必須滿足的條件。如果這個(gè)條件計(jì)算為FALSE,并且提供了第一個(gè)ELSIF條件,那么Oracle將轉(zhuǎn)到這個(gè)條件。ELSIF子句用來指出在隨后的條件得到滿足時(shí)應(yīng)該執(zhí)行的另一個(gè)操作過程或一組語(yǔ)句。如果在ELSIF關(guān)鍵字之后列出的條件計(jì)算為TRUE,那么將執(zhí)行在隨后的THEN關(guān)鍵字之后列出的語(yǔ)句。如果在IF和ELSIF子句中提供的條件都是FALSE,將自動(dòng)執(zhí)行ELSE子句中提供的任何語(yǔ)句。IF語(yǔ)句總是以END

IF關(guān)鍵字結(jié)束。注意:ELSIF子句的關(guān)鍵字是一個(gè)單詞,不能寫成“ELSEIF”或“ELSE

IF”6執(zhí)行控制--IF語(yǔ)句例編寫PL/SQL語(yǔ)句塊,計(jì)算所購(gòu)買圖書的零售價(jià),然后

確定在發(fā)貨時(shí)應(yīng)該包括的禮品。DECLARE v_giftVARCHAR2(20); c_retailpriceNUMBER(5,2):=29.95;BEGIN IFc_retailprice>56THEN v_gift:='FREESHIPPING'; ELSIFc_retailprice>25THEN v_gift:='BOOKCOVER'; ELSIFc_retailprice>12THEN v_gift:='BOXOFBOOKLABELS'; ELSE v_gift:='BOOKMARKER'; ENDIF; DBMS_OUTPUT.PUT_LINE('Thegiftforabookcosting'||c_retailprice||'isa'||v_gift);END;7

練習(xí)1.請(qǐng)按以下對(duì)應(yīng)關(guān)系,根據(jù)成績(jī)的不同,打印出對(duì)應(yīng)的級(jí)別

>90A>80B>70C>60D<=60E8執(zhí)行控制--CASE表達(dá)式CASEselectorWHENexpression1THENresult1WHENexpression2THENresult2WHENexpressionNTHENresultN[ELSEresultN+1]END?9CASE表達(dá)式根據(jù)不同的輸入打印不同的信息DECLAREv_gradechar(1):=UPPER('&p_grade');v_appraisalVARCHAR2(20);BEGINv_appraisal:=CASEv_gradeWHEN'A'THEN'Excellent'WHEN'B'THEN'VeryGood'WHEN'C'THEN'Good'ELSE'Nosuchgrade'END;DBMS_OUTPUT.PUT_LINE('Grade:'||v_grade||'Appraisal:'||v_appraisal);END;10

練習(xí)1.請(qǐng)按以下對(duì)應(yīng)關(guān)系,根據(jù)信號(hào)燈的不同,打印出對(duì)應(yīng)的行為

紅燈

綠燈

黃燈

等11循環(huán)控制希望反復(fù)執(zhí)行PL/SQL塊的可執(zhí)行部分中的語(yǔ)句。創(chuàng)建一個(gè)循環(huán),其中包括要執(zhí)行的語(yǔ)句,這個(gè)循環(huán)一直重復(fù),直到滿足某個(gè)條件為止,這時(shí)將會(huì)退出循環(huán)。有三種類型的循環(huán),你可以在PL/SQL塊的可執(zhí)行部分使用它們,以便重復(fù)執(zhí)行一組語(yǔ)句:基本循環(huán)FOR循環(huán)WHILE循環(huán)12循環(huán)控制--基本loop循環(huán)基本循環(huán)的語(yǔ)法:說明:基本循環(huán)用來執(zhí)行語(yǔ)句,直到滿足了EXIT子句指定的條件為止。根據(jù)指定的條件,執(zhí)行循環(huán)的次數(shù)在各次執(zhí)行時(shí)可能是不同的。LOOP關(guān)鍵字指出循環(huán)的開始,END

LOOP指出循環(huán)的結(jié)束。LOOP與END

LOOP之間的所有語(yǔ)句將一直重復(fù)執(zhí)行,直到退出循環(huán)為止。LOOP statements; EXIT

[WHENcondition];ENDLOOP;13循環(huán)控制--基本循環(huán)EXIT關(guān)鍵字指出應(yīng)該何時(shí)退出循環(huán)。注意:因?yàn)橐獔?zhí)行的語(yǔ)句之后列出了EXIT的關(guān)鍵字,所以循環(huán)中任何語(yǔ)句至少自動(dòng)執(zhí)行一次。這被稱為“后測(cè)試”(post-test)。在執(zhí)行語(yǔ)句之后,將評(píng)估EXIT子句中列出的任何條件,如果添加為TRUE,那么循環(huán)將會(huì)結(jié)束,然后將執(zhí)行PL/SQL塊的其余部分。14循環(huán)控制--基本循環(huán)例子:創(chuàng)建一個(gè)打印一系列數(shù)字的循環(huán)。DECLARE v_counterNUMBER(1):=0;BEGINLOOP v_counter:=v_counter+1; DBMS_OUTPUT.PUT_LINE('Thecurrentvalueofthecounteris'||v_counter); EXITWHENv_counter=4;ENDLOOP;END;15

練習(xí)1.請(qǐng)打印出1~10之間的偶數(shù)16循環(huán)控制--FOR循環(huán)FOR循環(huán)的語(yǔ)法說明FOR循環(huán)也使用一個(gè)計(jì)數(shù)器來控制循環(huán)的執(zhí)行次數(shù)。計(jì)數(shù)器不是一個(gè)必須在PL/SQL塊的聲明部分聲明的變量。在第一次執(zhí)行LOOP時(shí),將隱含聲明計(jì)數(shù)器。FOR子句要求用戶指出計(jì)數(shù)器的上限和下限。也即,必須指定計(jì)數(shù)器的初始值(lower_limit)以及終止循環(huán)的值(upper_limit)。在每一次執(zhí)行循環(huán)時(shí),計(jì)數(shù)器都將增加1。到達(dá)定義為計(jì)數(shù)器上限的值之后,就將退出這個(gè)循環(huán)。如果在這個(gè)子句中包括了REVERSE關(guān)鍵字,那么計(jì)數(shù)器可以采取相反的方式(計(jì)數(shù)器減少)FORcounterIN[REVERSE]lower_limit..upper_limitLOOP statements;ENDLOOP;17循環(huán)控制--FOR循環(huán)例子:FOR循環(huán)使用i作為循環(huán)計(jì)數(shù)器,IN關(guān)鍵字指定范圍BEGIN FORIIN1..10LOOP DBMS_OUTPUT.PUT_LINE('Thecurrentvalueofthecounteris'||i); ENDLOOP;END;18

練習(xí)1.請(qǐng)打印出15~25之間的所有數(shù)19循環(huán)控制--FOR循環(huán)CREATETABLEtemp_table(num_colNUMBER);DECLARE v_counterNUMBER:=10;BEGIN INSERTINTOtemp_table(num_col)VALUES(v_counter); FORv_counterIN20..25LOOP INSERTINTOtemp_table(num_col)VALUES(v_counter); ENDLOOP; INSERTINTOtemp_table(num_col)VALUES(v_counter); FORv_counterINREVERSE20..25LOOP INSERTINTOtemp_table(num_col)VALUES(v_counter); ENDLOOP;END;DROPTABLEtemp_table;20WHILE循環(huán)WHILE循環(huán)語(yǔ)法:說明:執(zhí)行一系列語(yǔ)句,直到條件變?yōu)镕ALSE為止。與前面循環(huán)不同,如果條件最初為FALSE,那么永遠(yuǎn)不能進(jìn)入這個(gè)循環(huán)。在WHILE子句提供的條件決定了循環(huán)將在何時(shí)終止。WHILEconditionLOOP statements;ENDLOOP;21WHILE循環(huán)例子:PL/SQL塊中使用WHILE循環(huán)來顯示變量的值,

直到指定的條件為FALSE為止。DECLARE v_counterNUMBER(2):=0;BEGIN WHILEv_counter<15LOOP DBMS_OUTPUT.PUT_LINE('Thecurrentvalueofthecounteris'||v_counter); v_counter:=v_counter+1; ENDLOOP;END;22

練習(xí)1.請(qǐng)打印出1~10之間的偶數(shù)(注:請(qǐng)用Whileloop的語(yǔ)法實(shí)現(xiàn))23嵌套的循環(huán)任何類型的循環(huán)都可以嵌套在另一個(gè)循環(huán)中。注意:在控制返回外部循環(huán)之前,必須完成內(nèi)部循環(huán)的執(zhí)行。在控制返回循環(huán)之后,只要外部循環(huán)的條件有效,就會(huì)再次執(zhí)行外部循環(huán),這包括了內(nèi)部循環(huán)的執(zhí)行。這個(gè)過程將一直繼續(xù),直到外部循環(huán)結(jié)束為止。24例子:PL/SQL塊包含了一個(gè)嵌套的FOR循環(huán)

25DECLARE v_counterNUMBER(2):=0;BEGINWHILEv_counter<3LOOP FORiIN1..2LOOP DBMS_OUTPUT.PUT_LINE('ThecurrentvalueoftheFORLOOPcounteris'||i); ENDLOOP; DBMS_OUTPUT.PUT_LINE('ThecurrentvalueoftheWHILEcounteris'||v_counter); v_counter:=v_counter+1; ENDLOOP;END;順序控制順序控制用于按順序執(zhí)行語(yǔ)句。用戶可以使用標(biāo)簽使程序獲得更好的可讀性。程序塊或循環(huán)都可以被標(biāo)記。標(biāo)簽的形式是《》。26順序控制--標(biāo)簽聲明標(biāo)簽聲明由封裝在<<>>中的label_name組成,后面至少要有一條可執(zhí)行的語(yǔ)句。語(yǔ)法如下所示:27<<label_name>>{...statements...}順序控制--GOTO語(yǔ)句執(zhí)行GOTO語(yǔ)句時(shí),控制會(huì)立即轉(zhuǎn)到由標(biāo)簽標(biāo)記的語(yǔ)句。語(yǔ)法如下所示:28GOTOlabel_name;對(duì)于塊、循環(huán)、IF語(yǔ)句而言,從外層跳轉(zhuǎn)到內(nèi)層是非法的。label_name在代碼范圍內(nèi)必須是唯一的。標(biāo)簽聲明后必須至少有一個(gè)語(yǔ)句要執(zhí)行。例子:判斷一個(gè)數(shù)字37是否為質(zhì)數(shù)

29DECLAREpVARCHAR2(30);nPLS_INTEGER:=37;BEGINFORjin2..ROUND(SQRT(n))LOOPIFnMODj=0THENp:='isnotaprimenumber';GOTOprint_now;ENDIF;ENDLOOP;p:='isaprimenumber';<<print_now>>DBMS_OUTPUT.PUT_LINE(TO_CHAR(n)||p);END;/順序控制--NULL語(yǔ)句NULL語(yǔ)句代表不進(jìn)行任何操作,它將直接跳轉(zhuǎn)到下一語(yǔ)句執(zhí)行。語(yǔ)法如下所示:30NULL;例子:使用GOTO語(yǔ)句進(jìn)行跳轉(zhuǎn),但在標(biāo)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論