一.Oracle的循环
在所有的编程语言中,循环都是一个非常重要的语法,掌握循环,是程序员必不可少的能力。
在Oracle中,常用的有四种循环,loop循环,while循环,for循环和goto循环,在本篇文章中,会向大家分别介绍这几种循环的语法和实例。
1. loop循环
loop经常会与exit when关键字结合使用,具体语法如下:
loop --开始循环的标志loop_body; --要执行的语句 exit when 条件; --退出循环的条件[loop_body;] --要执行的语句end loop; --结束循环的标志
循环输出数值:
-- 循环打印0-100之间的所有偶数,并求和
declare
var_num int:=0;
var_sum int:=0;
beginloopdbms_output.put_line(var_num);var_sum := var_sum + var_num;var_num := var_num + 2;exit when var_num >100;end loop;dbms_output.put_line(var_sum);
end;
2. while循环
while循环和loop循环的语法非常相似,不过相较于loop循环,while循环多出了进入循环的条件,具体语法如下:
while 条件 --进入循环的条件loop --循环开始的标志loop_body; --要执行的循环语句[exit when 条件;] --中途退出的条件end loop;
end;
declare
var_num int := 0;
beginwhile var_num <= 100loopdbms_output.put_line(var_num);var_num := var_num + 2;exit when var_num >100;end loop;
end;
3. for 循环
for循环是四种循环中最为简单的一种,具体语法如下:
for 变量 in 小值..大值 looploop_body;[exit when 条件];
end loop;
-- 循环打印0-100之间的所有偶数
beginfor var_num in 0..100 loopif mod(var_num,2) = 0 thendbms_output.put_line(var_num);end if;end loop;
end;
4. goto循环
goto的用法和其他三种循环都不一样,当使用goto时,可以无条件的跳到处于同一个PL/SQL块的任意执行语句处。具体使用方法如下:
-- 循环打印0-100之间的所有偶数,并求和
declare
var_num int := 0;
var_sum int := 0;
begin<<routine>> --定义goto标签var_num := var_num + 1; --循环体,也就是需要执行的循环部分if mod(var_num,2) = 0 thendbms_output.put_line(var_num);var_sum := var_sum + var_num;end if;if var_num <= 100 then --进入循环的条件goto routine; --返回上面的循环end if;dbms_output.put_line(var_sum);
end;
二.continue,retune,exit的使用
1. continue
continue在英文中有继续的意思,在oracle中结合循环使用,则是跳过本次循环,继续下一次循环。
利用cintinue关键字,可以轻松的做到数据的筛选,例如打印0-100之间的所有偶数:
declare
var_num int := -1;
beginloopvar_num := var_num +1;
# 当大于100时,会结束整个循环exit when var_num > 100;
# 当变量为奇数时,会跳过之后的执行语句,结束这次循环,从而进入下次循环 if mod(var_num,2) =1 thencontinue;end if;dbms_output.put_line(var_num);end loop;
end;
continue不会跳出整个循环,它只是跳过不符合条件的本次循环,从而开启新的循环,依旧处于循环阶段,直到所有数据全部循环完毕。
而exit则是在符合条件后,直接结束整个循环部分,转而去执行循环体外的其他内容。
2. return
在循环中使用exit和return时,两者的作用都是跳出整个循环,不过不同于exit ,return在跳出整个循环的同时,循环体外的其他内容也不会执行。
下面给出几段代码,查看两者的不同:
beginfor var_num in 1..5 loopif var_num = 3 thenexit;--return;end if;dbms_output.put_line(var_num); end loop;dbms_output.put_line('I love oracle!');
end;
结果:
exit:
1
2
I love oracle!return:
1
2
可以看出相较于exit,return直接跳出了整个循环,同时还跳过了循环外的执行语句,直接结束了整段代码。