Oracle入门(十四.9)之迭代控制:WHILE和FOR循环
一、WHILE循環(huán)
您可以使用WHILE循環(huán)重復一系列語句,直到控制條件不再為TRUE。 條件在每次迭代開始時進行評估。當條件為FALSE或NULL時,循環(huán)終止。 如果條件在循環(huán)開始時為FALSE或NULL,則不會執(zhí)行進一步的迭代。
WHILE condition LOOPstatement1;statement2;. . . END LOOP;(1)在語法中?條件是布爾變量或表達式(TRUE,FALSE或NULL)
?語句可以是一個或多個PL / SQL或SQL語句
?如果條件中涉及的變量在循環(huán)體內(nèi)不發(fā)生變化,則條件保持為TRUE,循環(huán)不會終止。- 注意:如果條件產(chǎn)生NULL,則循環(huán)被繞過,并且控制傳遞給循環(huán)后面的語句。 WHILE condition LOOPstatement1;statement2;. . . END LOOP;
(2)在本例中,國家代碼CA和城市蒙特利爾的三個新位置ID正在添加。 該示例中顯式聲明了計數(shù)器。
DECLAREv_countryid locations.country_id%TYPE := 'CA';v_loc_id locations.location_id%TYPE;v_new_city locations.city%TYPE := 'Montreal';v_counter NUMBER := 1; BEGINSELECT MAX(location_id) INTO v_loc_id FROM locationsWHERE country_id = v_countryid;WHILE v_counter <= 3 LOOPINSERT INTO locations(location_id, city, country_id)VALUES((v_loc_id + v_counter), v_new_city, v_countryid);v_counter := v_counter + 1;END LOOP; END;(3)隨著WHILE循環(huán)的每次迭代,計數(shù)器(v_counter)遞增。 如果迭代次數(shù)小于或等于數(shù)字3,則執(zhí)行循環(huán)內(nèi)的代碼,并將一行插入到位置表中。
DECLAREv_countryid locations.country_id%TYPE := 'CA';v_loc_id locations.location_id%TYPE;v_new_city locations.city%TYPE := 'Montreal';v_counter NUMBER := 1; BEGINSELECT MAX(location_id) INTO v_loc_id FROM locationsWHERE country_id = v_countryid;WHILE v_counter <= 3 LOOPINSERT INTO locations(location_id, city, country_id)VALUES((v_loc_id + v_counter), v_new_city, v_countryid);v_counter := v_counter + 1;END LOOP; END;(4)計數(shù)器超過此城市和國家/地區(qū)的新位置數(shù)后,控制循環(huán)的條件評估為FALSE,循環(huán)終止。
DECLAREv_countryid locations.country_id%TYPE := 'CA';v_loc_id locations.location_id%TYPE;v_new_city locations.city%TYPE := 'Montreal';v_counter NUMBER := 1; BEGINSELECT MAX(location_id) INTO v_loc_id FROM locationsWHERE country_id = v_countryid;WHILE v_counter <= 3 LOOPINSERT INTO locations(location_id, city, country_id)VALUES((v_loc_id + v_counter), v_new_city, v_countryid);v_counter := v_counter + 1;END LOOP; END;二、FOR循環(huán)描述
FOR循環(huán)具有與基本循環(huán)相同的通用結構。 另外,它們在LOOP關鍵字之前有一個控制語句來設置PL / SQL執(zhí)行的迭代次數(shù)。
FOR counter IN [REVERSE]lower_bound..upper_bound LOOPstatement1;statement2;. . . END LOOP;(1)FOR循環(huán)規(guī)則:?使用FOR循環(huán)快速測試迭代次數(shù)。
?不要申報柜臺; 它被隱含地聲明。
?lower_bound .. upper_bound是必需的語法。
FOR counter IN [REVERSE]lower_bound..upper_bound LOOPstatement1;statement2;. . . END LOOP;(2)FOR循環(huán)語法
?Counter是一個隱式聲明的整數(shù),其值在循環(huán)的每次迭代中自動增加或減少(如果使用REVERSE關鍵字,則減小),直到達到上限或下限。
?REVERSE使計數(shù)器從每個上限到下限迭代遞減。 (請注意,下限是首先引用的。)
?lower_bound指定計數(shù)器值范圍的下限。
?upper_bound指定計數(shù)器值范圍的上限。
?不要申報柜臺。 它被隱含地聲明為一個整數(shù)。
(3)FOR循環(huán)示例
您已經(jīng)學會了如何使用簡單的LOOP和WHILE循環(huán)為國家代碼CA和蒙特利爾市插入三個新位置。 幻燈片向您展示了如何通過使用FOR循環(huán)實現(xiàn)相同。
DECLAREv_countryid locations.country_id%TYPE := 'CA';v_loc_id locations.location_id%TYPE;v_new_city locations.city%TYPE := 'Montreal'; BEGINSELECT MAX(location_id) INTO v_loc_idFROM locationsWHERE country_id = v_countryid;FOR i IN 1..3 LOOPINSERT INTO locations(location_id, city, country_id)VALUES((v_loc_id + i), v_new_city, v_countryid );END LOOP; END;(4)FOR循環(huán)指南
?僅在循環(huán)中引用計數(shù)器; 它在循環(huán)外部是未定義的。?不要將計數(shù)器作為分配的目標。
?循環(huán)限制都不應為NULL。
(5)FOR循環(huán)表達式示例
在編寫FOR循環(huán)時,LOOP語句的下限和上限不需要是數(shù)字文字。 它們可以是轉換為數(shù)值的表達式。
DECLAREv_lower NUMBER := 1;v_upper NUMBER := 100; BEGINFOR i IN v_lower..v_upper LOOP...END LOOP; END;(6)何時使用循環(huán)指南
?循環(huán)內(nèi)的語句必須至少執(zhí)行一次時使用基本循環(huán)。
?如果必須在每次迭代開始時評估條件,則使用WHILE循環(huán)。
?如果迭代次數(shù)已知,則使用FOR循環(huán)。
總結
以上是生活随笔為你收集整理的Oracle入门(十四.9)之迭代控制:WHILE和FOR循环的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阅读app怎么导入书源 本地书源如何传送
- 下一篇: Oracle入门(十四.10)之显式游标