在如C/C++,Java编程语言的循环控制结构中,都有break和continue关键字可以灵活的控制循环体如何结束和跳出本次循环。但是PL/SQL本身是不具备这种关键字的,但是却可以利用一些方法实现类似的功能。
PL/SQL中的循环控制结构常用的有如下几种:
- LOOP sql statement...EXIT WHEN CONDITION ... END LOOP;
- WHILE CONDITION LOOP sql statement.... END LOOP;
- FOR loop_index IN [REVERSE] lowest_number..highest_number LOOP sql statement... END LOOP;
示例:我们有一张表EMP,表中内容如下:
现在我们要利用循环将表中的内容打印到屏幕上(利用dbms_output.putline()),条件是:ID为10的记录不要显示出来。本例中我们使用FOR循环结合隐式游标的方法进行循环,SQL代码如下:
declare
v_str varchar2(1000);
begin
for x in (select * from emp) loop
select x.id || ' ' || x.name || ' ' || x.salary || ' ' || x.xman_id
into v_str from dual;
if x.id = 10 then
dbms_output.put_line('loop is break');
goto mylabel;
end if;
dbms_output.put_line(v_str);
<<mylabel>>
null;
end loop;
end;
输出结果:
0 AA 3000 000
2 ADSGF 3200 002
3 CC 2900 003
4 DD 4200 004
5 EE 3400 005
6 FF 3600 006
7 GG 3600 007
8 HH 3300 008
9 II 5000 009
loop is break
11 KK 6400 011
13 AB 5000 013
2 ADSGF 3200 002
3 CC 2900 003
4 DD 4200 004
5 EE 3400 005
6 FF 3600 006
7 GG 3600 007
8 HH 3300 008
9 II 5000 009
loop is break
11 KK 6400 011
13 AB 5000 013
可以看出,我们利用了<<mylabel>> 和GOTO语句实现了类似continue的跳转,如果想要类似break的功能,exit关键字就可以实现,这里就不在敖述了。