Oracle入门(十四.9)之迭代控制:WHILE和FOR循环

、WHILE循环

您可以使用WHILE循环重复一系列语句,直到控制条件不再为TRUE。 条件在每次迭代开始时进行评估。

当条件为FALSE或NULL时,循环终止。 如果条件在循环开始时为FALSE或NULL,则不会执行进一步的迭代。

WHILE condition LOOP
 statement1;
 statement2;
 . . .
END LOOP;
(1)在语法中
•条件是布尔变量或表达式(TRUE,FALSE或NULL)

•语句可以是一个或多个PL / SQL或SQL语句

•如果条件中涉及的变量在循环体内不发生变化,则条件保持为TRUE,循环不会终止。
- 注意:如果条件产生NULL,则循环被绕过,并且控制传递给循环后面的语句。
WHILE condition LOOP
 statement1;
 statement2;
 . . .
END LOOP;

(2)在本例中,国家代码CA和城市蒙特利尔的三个新位置ID正在添加。 该示例中显式声明了计数器。

DECLARE
 v_countryid locations.country_id%TYPE := 'CA';
 v_loc_id locations.location_id%TYPE;
 v_new_city locations.city%TYPE := 'Montreal';
 v_counter NUMBER := 1;
BEGIN
 SELECT MAX(location_id) INTO v_loc_id FROM locations
 WHERE country_id = v_countryid;
 WHILE v_counter <= 3 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;
 END LOOP;
END;

(3)随着WHILE循环的每次迭代,计数器(v_counter)递增。 如果迭代次数小于或等于数字3,则执行循环内的代码,并将一行插入到位置表中。

DECLARE
 v_countryid locations.country_id%TYPE := 'CA';
 v_loc_id locations.location_id%TYPE;
 v_new_city locations.city%TYPE := 'Montreal';
 v_counter NUMBER := 1;
BEGIN
 SELECT MAX(location_id) INTO v_loc_id FROM locations
 WHERE country_id = v_countryid;
 WHILE v_counter <= 3 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;
 END LOOP;
END;

(4)计数器超过此城市和国家/地区的新位置数后,控制循环的条件评估为FALSE,循环终止。

DECLARE
 v_countryid locations.country_id%TYPE := 'CA';
 v_loc_id locations.location_id%TYPE;
 v_new_city locations.city%TYPE := 'Montreal';
 v_counter NUMBER := 1;
BEGIN
 SELECT MAX(location_id) INTO v_loc_id FROM locations
 WHERE country_id = v_countryid;
 WHILE v_counter <= 3 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;
 END LOOP;
END;


二、FOR循环描述

FOR循环具有与基本循环相同的通用结构。 另外,它们在LOOP关键字之前有一个控制语句来设置PL / SQL执行的迭代次数。

FOR counter IN [REVERSE]
 lower_bound..upper_bound LOOP
 statement1;
 statement2;
 . . .
END LOOP;
(1)FOR循环规则:
•使用FOR循环快速测试迭代次数。
•不要申报柜台; 它被隐含地声明。

•lower_bound .. upper_bound是必需的语法。

FOR counter IN [REVERSE]
 lower_bound..upper_bound LOOP
 statement1;
 statement2;
 . . .
END LOOP;

(2)FOR循环语法
•Counter是一个隐式声明的整数,其值在循环的每次迭代中自动增加或减少(如果使用REVERSE关键字,则减小),直到达到上限或下限。
•REVERSE使计数器从每个上限到下限迭代递减。 (请注意,下限是首先引用的。)

•lower_bound指定计数器值范围的下限。
•upper_bound指定计数器值范围的上限。

•不要申报柜台。 它被隐含地声明为一个整数。

(3)FOR循环示例

您已经学会了如何使用简单的LOOP和WHILE循环为国家代码CA和蒙特利尔市插入三个新位置。 幻灯片向您展示了如何通过使用FOR循环实现相同。

DECLARE
 v_countryid locations.country_id%TYPE := 'CA';
 v_loc_id locations.location_id%TYPE;
 v_new_city locations.city%TYPE := 'Montreal';
BEGIN
 SELECT MAX(location_id) INTO v_loc_id
 FROM locations
 WHERE country_id = v_countryid;
 FOR i IN 1..3 LOOP
 INSERT INTO locations(location_id, city, country_id)
 VALUES((v_loc_id + i), v_new_city, v_countryid );
 END LOOP;
END;

(4)FOR循环指南

•仅在循环中引用计数器; 它在循环外部是未定义的。
•不要将计数器作为分配的目标。
•循环限制都不应为NULL。

(5)FOR循环表达式示例

在编写FOR循环时,LOOP语句的下限和上限不需要是数字文字。 它们可以是转换为数值的表达式。

DECLARE
 v_lower NUMBER := 1;
 v_upper NUMBER := 100;
BEGIN
 FOR i IN v_lower..v_upper LOOP
 ...
 END LOOP;
END;

(6)何时使用循环指南

•循环内的语句必须至少执行一次时使用基本循环。
•如果必须在每次迭代开始时评估条件,则使用WHILE循环。
•如果迭代次数已知,则使用FOR循环。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值