1,当不确定多少次要执行循环体并且希望循环体至少执行一次,则会使用LOOP语句
LOOP
{...statements...} - 执行每个通过循环的代码语句
END LOOP;
实例:
LOOP
week := day * 7;
EXIT WHEN week > 21;
END LOOP;
此时当week值大于21时终止,可以使用EXIT语句或当遇到EXIT WHEN语句的结果为TRUE时终止LOOP语句。
2,当想要执行循环主体固定次数时,可使用FOR LOOP循环
FOR loop_counter IN [REVERSE] lowest_number..highest_number
LOOP
{...statements...}
END LOOP;
loop_counter - 循环计数器变量。
REVERSE - 可选的。 如果指定,循环计数器将反向计数。(如果指定了REVERSE,那么highest_number将是loop_counter的起始值,而lowest_number将是loop_counter的结束值。)
lowest_number - loop_counter的起始值。
highest_number - loop_counter的结束值。
statements - 执行每个通过循环的代码语句。
实例:
FOR test IN 1..10
LOOP
rtest := test * 2;
END LOOP;
循环将10次。 test将从1开始并在10结束。
FOR test IN REVERSE 1..10
LOOP
rtest := test * 2;
END LOOP;
使用REVERSE,相反的顺序运行,同样循环10次,test将从10开始并在1结束。
3,当想要获取并处理光标中的每条记录时,将使用CURSOR FOR LOOP。 当光标中的所有记录都被取出时,CURSOR FOR LOOP将终止。
FOR record_index in cursor_name
LOOP
{...statements...}
END LOOP;
record_index - 记录的索引。
cursor_name - 希望从中获取记录的光标的名称。
statements - 执行代码的语句通过CURSOR FOR LOOP。
实例:
CREATE OR REPLACE Function TotalPrice
( name_in IN varchar2 )
RETURN varchar2
IS
total_p number(6);
cursor c1 is
SELECT bprice
FROM book
WHERE bname = name_in;
BEGIN
total_p := 0;
FOR emp_c in c1
LOOP
total_p := total_p + emp_c.bprice;
END LOOP;
RETURN total_p;
END;
上例中,创建了一个名为c1的游标。 从光标c1中取出所有记录后,CURSOR FOR循环将终止。
4,当不确定执行循环体的次数,并且循环体可能一次都不会执行,则使用WHILE LOOP。
WHILE condition
LOOP
{...statements...} - 执行每个通过循环的代码语句。
END LOOP;
condition - 条件是每次通过循环的测试。 如果条件评估为TRUE,则执行循环体。 如果条件评估为FALSE,则循环终止。
实例:
WHILE money <= 200
LOOP
money := price * 10;
END LOOP;
当money的值大于200,循环将终止,WHILE LOOP将在money <= 200时继续,并且当money> 200,循环将终止。
5,当不知道想要循环体执行多少次时,可使用模拟(Oracle中是没有REPEAT UNTIL LOOP)的REPEAT UNTIL LOOP语句。
LOOP
{...statements...} - 执行每个通过循环的代码语句。
EXIT [ WHEN boolean_condition ];
END LOOP;
boolean_condition - 可选的。 这是终止循环的条件。
实例:
LOOP
money := price * 10;
EXIT WHEN money > 2000;
END LOOP;
我们希望循环重复,直到money的值大于2000时终止,所以使用EXIT WHEN语句。
6,EXIT语句最常用于终止LOOP语句。
EXIT [WHEN boolean_condition];
boolean_condition - 可选的。 这是终止LOOP的条件。
实例:
LOOP
money := price * 10;
EXIT WHEN money > 2000;
END LOOP;
当money的值大于2000时,LOOP循环会终止。