知识点:简单循环,WHILE 循环,数值型 FOR 循环,CONTINUE 语句以及嵌套循环等。PL/SQL 有四种类型的循环:简单循环、WHILE 循环、FOR 循环以 及游标 FOR 循环。本章会讨论前三种循环,并学习 Oracle 11g 中所引入的 CONTINUE 和 CONTINUE WHEN 语句,以及循环的嵌套使用。
1、loop循环的使用
1.1 简单循环loop的使用
简单循环,就像其名称一样,是一种最基本的循环。 简单循环语句结构:
loop
Statement 1;--循环语句
Statement 2;
……
Statement n;
end loop;
语法中:
loop 是保留字,标识简单循环的开始。Statement_1 到 Statement_n 是循环体内容,也就是需要反复执行的语句。这些语句由一个或者多个结构语句组成。end loop 是表示循环结构结束的保留字。
循环结构运行时,循环体内语句执行完一遍后,程序将再次执行循环体结构最开始的语句,并将无限制地执行,因为没有语句指定何时循环会终止。因此,简单循环称为无穷循环,因为无法退出这个循环。正确构造的循环需要退出条件,退出条件决定循环在何种情况下终止。退出条件有两种形式:EXIT 和 EXIT WHEN。接下来我们来了解这两种形式。
示例练习1:使用简单loop循环,输出语句
declare
v_num1 int := 0 ; --声明一个变量,设置初始值是0
begin
loop
v_num1 := v_num1 + 1;
dbms_output.put_line( '这是第' || v_num1 || '遍,输出');
end loop;
end;
输出结果演示:
结果说明:在使用简单loop输出时,提示错误:“ORA-20000: ORU-10027: buffer overflow, limit of 10000 bytes”,
错误出现的原因:因为在sqlplus下,如果set serveroutput on此时就会用dbms_output将相关的信息打印到屏幕上,如果sqlplus登录环境没有设置buffer的大小,默认情况下是10000,将打印打开也同时赋予10000的buffer,如果输出超过这个值,则会报以上错误!
解决办法:设置更大的buffer值,最大支持1000000!或者在begin后面加上DBMS_OUTPUT.ENABLE(buffer_size => null); ,表示输出buf