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

下載本文檔

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

文檔簡介

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

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

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

IF”6執(zhí)行控制--IF語句例編寫PL/SQL語句塊,計算所購買圖書的零售價,然后

確定在發(fā)貨時應(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.請按以下對應(yīng)關(guān)系,根據(jù)成績的不同,打印出對應(yīng)的級別

>90A>80B>70C>60D<=60E8執(zhí)行控制--CASE表達式CASEselectorWHENexpression1THENresult1WHENexpression2THENresult2WHENexpressionNTHENresultN[ELSEresultN+1]END?9CASE表達式根據(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.請按以下對應(yīng)關(guān)系,根據(jù)信號燈的不同,打印出對應(yīng)的行為

紅燈

綠燈

黃燈

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

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

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

[WHENcondition];ENDLOOP;13循環(huán)控制--基本循環(huán)EXIT關(guān)鍵字指出應(yīng)該何時退出循環(huán)。注意:因為要執(zhí)行的語句之后列出了EXIT的關(guān)鍵字,所以循環(huán)中任何語句至少自動執(zhí)行一次。這被稱為“后測試”(post-test)。在執(zhí)行語句之后,將評估EXIT子句中列出的任何條件,如果添加為TRUE,那么循環(huán)將會結(jié)束,然后將執(zhí)行PL/SQL塊的其余部分。14循環(huán)控制--基本循環(huán)例子:創(chuàng)建一個打印一系列數(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.請打印出1~10之間的偶數(shù)16循環(huán)控制--FOR循環(huán)FOR循環(huán)的語法說明FOR循環(huán)也使用一個計數(shù)器來控制循環(huán)的執(zhí)行次數(shù)。計數(shù)器不是一個必須在PL/SQL塊的聲明部分聲明的變量。在第一次執(zhí)行LOOP時,將隱含聲明計數(shù)器。FOR子句要求用戶指出計數(shù)器的上限和下限。也即,必須指定計數(shù)器的初始值(lower_limit)以及終止循環(huán)的值(upper_limit)。在每一次執(zhí)行循環(huán)時,計數(shù)器都將增加1。到達定義為計數(shù)器上限的值之后,就將退出這個循環(huán)。如果在這個子句中包括了REVERSE關(guān)鍵字,那么計數(shù)器可以采取相反的方式(計數(shù)器減少)FORcounterIN[REVERSE]lower_limit..upper_limitLOOP statements;ENDLOOP;17循環(huán)控制--FOR循環(huán)例子:FOR循環(huán)使用i作為循環(huán)計數(shù)器,IN關(guān)鍵字指定范圍BEGIN FORIIN1..10LOOP DBMS_OUTPUT.PUT_LINE('Thecurrentvalueofthecounteris'||i); ENDLOOP;END;18

練習(xí)1.請打印出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)語法:說明:執(zhí)行一系列語句,直到條件變?yōu)镕ALSE為止。與前面循環(huán)不同,如果條件最初為FALSE,那么永遠不能進入這個循環(huán)。在WHILE子句提供的條件決定了循環(huán)將在何時終止。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.請打印出1~10之間的偶數(shù)(注:請用Whileloop的語法實現(xiàn))23嵌套的循環(huán)任何類型的循環(huán)都可以嵌套在另一個循環(huán)中。注意:在控制返回外部循環(huán)之前,必須完成內(nèi)部循環(huán)的執(zhí)行。在控制返回循環(huán)之后,只要外部循環(huán)的條件有效,就會再次執(zhí)行外部循環(huán),這包括了內(nèi)部循環(huán)的執(zhí)行。這個過程將一直繼續(xù),直到外部循環(huán)結(jié)束為止。24例子:PL/SQL塊包含了一個嵌套的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í)行語句。用戶可以使用標(biāo)簽使程序獲得更好的可讀性。程序塊或循環(huán)都可以被標(biāo)記。標(biāo)簽的形式是《》。26順序控制--標(biāo)簽聲明標(biāo)簽聲明由封裝在<<>>中的label_name組成,后面至少要有一條可執(zhí)行的語句。語法如下所示:27<<label_name>>{...statements...}順序控制--GOTO語句執(zhí)行GOTO語句時,控制會立即轉(zhuǎn)到由標(biāo)簽標(biāo)記的語句。語法如下所示:28GOTOlabel_name;對于塊、循環(huán)、IF語句而言,從外層跳轉(zhuǎn)到內(nèi)層是非法的。label_name在代碼范圍內(nèi)必須是唯一的。標(biāo)簽聲明后必須至少有一個語句要執(zhí)行。例子:判斷一個數(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語句NULL語句代表不進行任何操作,它將直接跳轉(zhuǎn)到下一語句執(zhí)行。語法如下所示:30NULL;例子:使用GOTO語句進行跳轉(zhuǎn),但在標(biāo)

溫馨提示

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

最新文檔

評論

0/150

提交評論