oracle for循环计数器,Oracle PL / SQL for loop循环

本文详细介绍了PL/SQL中的两种FOR循环:数字FOR循环和游标FOR循环。数字FOR循环适用于迭代次数已知的情况,而游标FOR循环则与数据库查询关联,用于遍历查询结果。文章通过实例展示了如何使用这两种循环,包括循环范围的动态设定、退出循环的条件以及如何在循环中处理数据。同时,还提到了循环标签的使用,以实现更复杂的控制流程。
摘要由CSDN通过智能技术生成

有两种PL / SQL FOR循环:数字FOR循环和游标FOR循环。

数字FOR循环是传统的。当循环开始时,FOR循环的迭代次数是已知的。

这里是数字FOR循环的一般语法:

FOR loop index IN [REVERSE] lowest number .. highest number

LOOP

executable statement(s)

END LOOP;

您必须在LOOP和END LOOP关键字之间至少有一个可执行语句。

实例

下面的循环执行10次; loop_counter从1开始,结束于10:

FOR loop_counter IN 1 .. 10

LOOP

--executable statements ...

END LOOP;

下面的循环执行10次; loop_counter从10开始,结束于1:

FOR loop_counter IN REVERSE 1 .. 10

LOOP

---executable statements ...

END LOOP;

这里是一个循环,甚至不执行一次。

FOR loop_counter IN REVERSE 10 .. 1

LOOP

---executable statements ...

END LOOP;

以下循环对由变量和表达式中的值确定的范围执行:

FOR calc_index IN start_period_number ..

LEAST (end_period_number, current_period)

LOOP

--executable statements ...

END LOOP;

实例2

循环范围的边界可以是文字,变量或表达式,但它们必须求值为数字。

DECLARE

first INTEGER := 1;

last INTEGER := 10;

high INTEGER := 100;

low INTEGER := 12;

BEGIN

-- Bounds are numeric literals:

FOR j IN -5..5 LOOP

NULL;

END LOOP;

-- Bounds are numeric variables:

FOR k IN REVERSE first..last LOOP

NULL;

END LOOP;

FOR step IN 0..(TRUNC(high/low) * 2) LOOP

NULL;

END LOOP;

END;

/

实例3

在FOR-LOOP语句中使用计数器的递增

DECLARE

TYPE DateList IS TABLE OF DATE INDEX BY PLS_INTEGER;

dates DateList;

BEGIN

FOR j IN 1..3 LOOP

dates(j*5) := SYSDATE;

END LOOP;

END;

/

循环边界的动态范围

PL / SQL允许您通过使用变量的边界在运行时指定循环范围。

CREATE TABLE temp (

emp_no NUMBER,

email_addr VARCHAR2(50)

); -- www .ja v a 2 s . com

DECLARE

emp_count NUMBER := 4;

BEGIN

FOR i IN 1..emp_count LOOP

INSERT INTO temp

VALUES(i, 'to be added later');

END LOOP;

END;

/

select * from temp;

drop table temp;

上面的代码生成以下结果:

458334eee57ba6f4ffa5aba20e5481a0.png

注意

如果循环范围的下限大于上限,则不执行循环体。

使用现有变量作为循环变量

DECLARE

i NUMBER := 5;

BEGIN

FOR i IN 1..3 LOOP

DBMS_OUTPUT.PUT_LINE ('Inside loop, i is ' || TO_CHAR(i));

END LOOP;

DBMS_OUTPUT.PUT_LINE ('Outside loop, i is ' || TO_CHAR(i));

END;

/

上面的代码生成以下结果:

8ea625e54b2f01565ab8ab6c13795eb9.png

引用与内部计数器名称相同的外部计数器

BEGIN

<>

FOR i IN 1..3 LOOP

<>

FOR i IN 1..3 LOOP

IF outer_loop.i = 2 THEN

DBMS_OUTPUT.PUT_LINE

( 'outer: ' || TO_CHAR(outer_loop.i) || ' inner: '

|| TO_CHAR(inner_loop.i));

END IF;

END LOOP inner_loop;

END LOOP outer_loop;

END;

/

上面的代码生成以下结果:

8a43d81c46c6bb56d44b5a1f7f7fc63e.png

EXIT的示例

您可以使用标签给循环命名。PL / SQL中的循环标签具有以下格式:

<>

其中label_name是标签的名称,并且该循环标签紧接在LOOP语句之前出现:

<>

FOR emp_rec IN emp_cur

LOOP

...

END LOOP;

EXIT语句使FOR循环提前完成。

DECLARE

v_employees employees%ROWTYPE;

CURSOR c1 is SELECT * FROM employees;

BEGIN

OPEN c1;

-- Fetch entire row into v_employees record:

FOR i IN 1..10 LOOP

FETCH c1 INTO v_employees;

EXIT WHEN c1%NOTFOUND;

-- Process data here

END LOOP;

CLOSE c1;

END;

/

EXIT与FOR LOOP中的标签

DECLARE

v_employees employees%ROWTYPE;

CURSOR c1 is SELECT * FROM employees;

BEGIN

OPEN c1;

<>

FOR i IN 1..10 LOOP

-- Process data here

FOR j IN 1..10 LOOP

FETCH c1 INTO v_employees;

EXIT outer_loop WHEN c1%NOTFOUND;

-- Process data here

END LOOP;

END LOOP outer_loop;

CLOSE c1;

END;

/

游标FOR循环

游标FOR循环是与显式游标相关联的循环。

下面是游标FOR循环的基本语法:

FOR record IN { cursor_name | (explicit SELECT statement) }

LOOP

executable statement(s)

END LOOP;

其中记录是由PL / SQL使用%ROWTYPE属性对由cursor_name指定的游标隐式声明的记录。

循环的游标示例

DECLARE

CURSOR c_my IS SELECT id, room_number FROM occupancy;

my_rec c_my%ROWTYPE;

BEGIN

OPEN c_my;

LOOP

FETCH c_my INTO my_rec;

EXIT WHEN c_my%NOTFOUND;

update_bill(my_rec.id, my_rec.room_number);

END LOOP;

CLOSE c_my;

END;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值