当程序需要反复执行某一操作时,就必须使用循环结构。PL/sql中的循环语句主要包括loop语句、while语句和for语句3种。
1、loop语句
loop语句会先执行一次循环体,然后在判断“exit when”关键字后面的条件表达式的值是true还是false,如果是true,则程序会退出循环体,否则程序将再次执行循环体,这样就使得程序至少能够执行一次循环体。
【实例】使用loop语句求得前100个自然数的和,并输出到屏幕。
declare sum_i int:=0; --定义整型变量,存储整数和 i int:=0; --定义整数变量,存储自然数 begin loop i:=i+1; --循环累加自然数 sum_i:=sum_i+i; --得出自然数 exit when i=100; --当循环100次时,程序退出循环体 end loop; dbms_output.put_line('前100个自然数的和是:'||sum_i); end;
2、while语句
while语句根据它的条件表达式的值执行零次或多次循环体,在每次执行循环体之前,首先要判断条件表达式的值是否为true,若为true,则程序执行循环体;否则退出while循环,然后继续执行while语句后面的其他代码。
【实例】使用while语句求得前100个自然数的和,并输出到屏幕。declare sum_i int:=0; --定义整型变量,存储整数和 i int:=0; --定义整数变量,存储自然数 begin while i<=99 loop --当i的值等于100时,程序退出while循环 i:=i+1; --得出自然数 sum_i:=sum_i+i; --计算前n个自然数的和 end loop; dbms_output.put_line('前100个自然数的和是:'||sum_i); end;
3、for语句
for语句是一个可以预置循环次数的循环控制语句,它有一个循环计数器,通常是一个整型变量,通过这个循环计数器来控制循环执行的次数。
【实例】使用for语句求得前100个自然数中偶数之和,并输出到屏幕。declare sum_i int:=0; --定义整型变量,存储整数和 begin for i in reverse 1..100 --遍历前100个自然数 loop if mod(i,2)=0 then --判断是否为偶数 sum_i:=sum_i+i; --计算偶数和 end if; end loop; dbms_output.put_line('前100个自然数中偶数之和是:'||sum_i); end;
在上面的for语句中,由于使用了关键字“reverse”,表示计数器i的值为递减状态,即i的初始值为100,随着每次递减1,最后一次for循环时i的值变为1。如果在for语句中不使用关键字“reverse”,则表示计数器i的值为递增状态,即i的初始值为1。