1. LOOP循环语句:
loop
statement1;
....
exit [when condition];
end loop;
(当condition为true时,会退出循环,并执行end loop后的相应操作)
declare
i int :=1;
begin
loop
insert into temp values (i);
exit when i=10;
i:= i+1;
end loop;
end;
/
解释:在执行以上PL/SQL块时,会使用基本循环为TEMP表插入10条数据(1,2,...,10),并当i=10时退出循环
2.while循环:
while condition loop
statement1;
statement2;
....
end loop;
(当condition为true时,PL/SQL执行器会执行循环体内的语句;当condition为false或null时,会退出循环,并执行end loop后的语句)
例:
declare
i int :=1;
begin
while i <= 10 loop
insert into temp values (i);
i := i+1;
end loop;
end;
/
解释:当执行以上PL/SQL块时,会使用while循环为temp表插入10条记录(1,2,....,10),当i=11时会退出循环。
3.For循环:
for counter in [reverse]
lower_bound .. upper_bound loop
statement1;
statement2;
...
end loop;
(counter是循环控制变量,并且该变量由oracle隐含定义,不需要显示定义;lower_bound和upper_bound分别对应循环控制变量的下界值和上界值。默认情况下,当使用for循环时,每次循环时循环控制变量会自动增一;如果指定reverse选项,那么每次循环时循环变量会自动减一。)
例:
begin
for i in reverse 1 .. 10 loop
insert into temp values(i);
end loop;
end;
/
解释:当执行以上PL/SQL块时,会为temp表插入10条记录。因为指定了reverse选项,所以被插入数据的顺序为10,9,8....1。
4.嵌套循环:
嵌套循环是指在一个循环语句之中嵌入另一个循环语句,而标号(label)则用于标记嵌套块或嵌套循环。
declare
result int;
begin
<<outer>>
for i in 1 ..100 loop
<<inter>>
for j in 1 ..100 loop
result := i*j;
exit outer when result =1000;
exit when result=500;
end loop inner;
dbms_output.put_line(result);
end loop outer;
dbms_output.put_line(result);
end;
/
当执行以上PL/SQL块时,如果result=1000,那么会直接退出外层循环,而当result=500时只会退出内层循环。