一、迭代控制:LOOP语句
循环多次重复一个语句或一系列语句。
PL / SQL提供了以下几种类型的循环:
•没有全面条件执行重复操作的基本循环•FOR循环,基于计数器执行迭代操作
•WHILE循环根据条件执行重复操作
二、基本循环
LOOP语句的最简单形式是基本(或无限)循环,它在关键字LOOP和END LOOP之间包含一系列语句。当循环内部的语句必须至少执行一次时,使用基本循环。
(1)基本循环退出
每当执行流程到达END LOOP语句时,控制权就被传递给相应的引入它的LOOP语句。即使在进入循环时EXIT条件已经满足,基本循环也允许执行其语句至少一次。 没有EXIT语句,循环将是无限的。
语法:
LOOP
statement1;
. . .
EXIT [WHEN condition];
END LOOP;
(2)基本循环示例
在本例中,插入了CA的国家代码和蒙特利尔市的三个新的位置ID。
DECLARE
v_countryid locations.country_id%TYPE := 'CA';
v_loc_id locations.location_id%TYPE;
v_counter NUMBER(2) := 1;
v_new_city locations.city%TYPE := 'Montreal';
BEGIN
SELECT MAX(location_id) INTO v_loc_id FROM locations
WHERE country_id = v_countryid;
LOOP
INSERT INTO locations(location_id, city, country_id)
VALUES((v_loc_id + v_counter), v_new_city, v_countryid);
v_counter := v_counter + 1;
EXIT WHEN v_counter > 3;
END LOOP;
END;
(3)基本循环EXIT声明
您可以使用EXIT语句来终止循环。控制权转到END LOOP语句后的下一个语句。 您可以将EXIT作为IF语句中的操作或循环内的独立语句。
DECLARE
v_counter NUMBER := 1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE('The square of '
||v_counter||' is: '|| POWER(v_counter,2));
v_counter := v_counter + 1;
IF v_counter > 10 THEN
EXIT;
END IF;
END LOOP;
END;
(4)基本循环EXIT语句规则
规则:EXIT语句必须放在循环中。
•如果EXIT条件位于循环的顶部(在任何其他可执行语句之前)并且该条件初始为真,则循环退出并且循环中的其他语句从不执行。
•基本循环可以包含多个EXIT语句,但您应该只有一个EXIT点。
(5)基本循环退出时声明
使用WHEN子句可以有条件地终止循环。 遇到EXIT语句时,将评估WHEN子句中的条件。 如果条件产生TRUE,则循环结束并且控制传递到循环后面的下一个语句。
DECLARE
v_counter NUMBER := 1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE('The square of '
||v_counter||' is: '|| POWER(v_counter,2));
v_counter := v_counter + 1;
EXIT WHEN v_counter > 10;
END LOOP;
END;