1 简单循环
LOOP
要执行的语句;
迭代条件; (可以写在这)
EXIT WHEN <条件语句>; /*条件满足,退出循环语句*/
迭代条件; (也可以写在这)
END LOOP;
例如:
--使用循环语句打印 1-100
declare
v_i number(5) :=1;
begin
loop
dbms_output.put_line(v_i);
exit when v_i >= 100;
v_i := v_i + 1;
end loop;
end;
或者:
--使用循环语句打印 1-100
declare
v_i number(5) :=1;
begin
loop
dbms_output.put_line(v_i);
v_i := v_i + 1;
exit when v_i > 100;
end loop;
end;
2 WHILE 循环
WHILE <布尔表达式> LOOP
要执行的语句;
END LOOP;
例如:
declare
v_i number(5) :=1;
begin
while v_i <= 100
loop
dbms_output.put_line(v_i);
v_i := v_i + 1;
end loop;
end;
--输出2-100之间的质数
declare
v_i number(3) :=2;
v_j number(3) :=2;
v_flag number(1) :=1;
begin
while v_i <= 100
loop
while v_j <= sqrt(v_i)
loop
if mod(v_i,v_j) = 0
then v_flag := 0;
end if;
v_j := v_j+1;
end loop;
if v_flag =1
then dbms_output.put_line(v_i);
end if;
v_j :=2;
v_i := v_i+1;
v_flag := 1;
end loop;
end;
3 数字式循环(FOR循环)
FOR 循环计数器 IN 下限 … 上限
LOOP
要执行的语句;
END LOOP;
说明:每循环一次,循环变量自动加1;使用关键字 REVERSE ,循环变量自动减1。跟在 IN REVERSE 后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用 EXIT 退出循环。
例如:
begin
for c in 1 .. 100
loop
dbms_output.put_line(c);
end loop;
end;
4 标号和 GOTO
PL/SQL 中 GOTO 语句是无条件跳转到指定的标号去的意思。语法如下:
GOTO label;
… …
<<label>> /*标号是用<< >>括起来的标识符*/
例如:
--输出2-100之间的质数
declare
v_flag number(1) := 1;
begin
for v_i in 2 .. 100 loop
for v_j in 2 .. sqrt(v_i) loop
if mod(v_i,v_j)=0 then v_flag :=0;
goto label;
end if;
end loop;
<<label>>
if v_flag =1 then dbms_output.put_line(v_i);
end if;
v_flag := 1;
end loop;
end;
5 使用 EXIT; 结束 FOR 循环
例如:
--打印1——100的自然数,当打印到50时,跳出循环,输出“打印结束”
begin
for i in 1 .. 100 loop
if i=50 then dbms_output.put_line('打印结束');
exit;
end if;
dbms_output.put_line(i);
end loop;
end;