1.先看exit和return
将exit 或是 return 用在loop 。。。。end loop;中都可以中断循环,但是它们有一个很明显的不同
看下面两个例子:
例一:
create or replace package body cux_test is procedure main is l_count number; l_test number:=6; begin dbms_output.put_line('开始循环'); for l_count in 1..10 loop if l_test=l_count then dbms_output.put_line('满足条件,退出循环'); return; else dbms_output.put_line('继续循环'); end if; end loop; dbms_output.put_line('结束程序'); end ; end cux_test;
例二:
create or replace package body cux_test is procedure main is l_count number; l_test number:=6; begin dbms_output.put_line('开始循环'); for l_count in 1..10 loop if l_test=l_count then dbms_output.put_line('满足条件,退出循环'); exit;--exit when x>=8;可以加条件 else dbms_output.put_line('继续循环'); end if; end loop; dbms_output.put_line('结束程序'); end ; end cux_test;
下面来看以上两个例子的执行结果:
例一:
开始循环
继续循环
继续循环
继续循环
继续循环
继续循环
满足条件,退出循环
例二:
开始循环
继续循环
继续循环
继续循环
继续循环
继续循环
满足条件,退出循环
结束程序
以上的例子说明了一个问题,exit只是单纯的结束循环,但还会继续执行程序包中其他的内容,而return则是直接中断整个程序。
2.continue的作用是终止本次循环,开始下一次循环,它不是跳出循环。
而oracle数据库之前却一直没有支持continue语法,直到oracle11g加入了continue语法,
其功能也是终止本次循环,开始下一次循环,exit语法的作用是跳出并结束循环。
begin for i in 1 .. 20 loop if i < 10 then continue; end if; dbms_output.put_line(i); end loop; end;
结果:
10 11 12 13 14 15 16 17 18 19 20
当i等于1到9的时候,程序运行到continue,使得当前循环停止,开始下一次循环,当i等于10的时候,不会执行到continue,所以从10开始输出。