-- 在编写循环控制结构的时候,可以使用基本循环,while循环,for循环三种类型语句
-- 在使用基本循环时,无论是否满足条件,语句至少会被执行一次,当condition为true时,会退出循环
-- 并执行end loop后面的操作,当编写基本循环时候一定要包含exit语句,否则容易死循环
-- 应该定义循环控制变量,并且在循环体内修改循环控制变量的值
declare
-- 基本循环,loop,exit等关键字
int number(2) :=0;
begin
loop
int :=int+1;
dbms_output.put_line(int);
exit when int =10;
end loop;
end;
-- while循环,条件为真会执行循环体内的语句,while循环以while..loop开始,以end loop结束
declare
int number(2):=1;
begin
while int <=10 loop
dbms_output.put_line('int的当前值为:'||int);
int :=int+1;
end loop;
end;
-- 当使用基本循环或while循环时,需要定义循环控制变量,并且循环控制变量不仅可以使用number类型
-- 也可以使用其他数据类型,当使用for循环时候,Oracle会隐含定义循环控制变量,不像其他高级语言的for循环
/*语法
for counter in [reverse] lower_bound .. upper_bound loop
statement1;
statement2;
.......
end loop;
*/
-- 默认情况下,当使用for循环时候,每次循环控制变量会自动增加1,如果指定reverse选项,那么循环控制变量会自动减一
-- Created on 2014-12-25 by ALDERIC
declare
-- Local variables here
-- i integer;
begin
for i in reverse 1 .. 10 loop
-- 相当于 i := 10,然后每次减一
-- 10/9/8......
dbms_output.put_line(i);
end loop;
end;
/*
嵌套循环和标号:
嵌套循环是指在一个循环语句之中嵌入另外一个循环,而标号label则用于标记嵌套块或嵌套循环
通过在嵌套循环中使用标号,可以区分内层循环和外层循环,并且可以在内层循环中直接退出外层
循环,在编写时可用<<labelName>>定义标号:
*/
declare
result int;
begin
<<outer_var>>
for i in 1 .. 10 loop
<<innner_var>>
for j in 1..10 loop
result := i*j;
exit outer_var when result = 100;
exit when result = 25;
end loop inner_var;
dbms_output.put_line(result);
end loop outer_var;
dbms_output.put_line(result);
end;
/**
goto语句无条件跳转到指定的标号中去的意思:
goto label;
....
<<label>>
*/
declare
v_count number(2):=1;
begin
loop
dbms_output.put_line('v_counter的当前值为:'||v_count);
v_count := v_count +1;
if v_count >10 then
goto labeloffloop;
end if;
end loop;
<<labeloffloop>>
dbms_output.put_line('v_counter的当前值为:'||v_count);
end;
declare
v_i number :=0;
v_s number :=0;
begin
<<label_1>>
v_i :=v_i + 1;
if v_i <= 1000 then
v_s := v_s + v_i;
goto label_1;
end if;
dbms_output.put_line(v_s);
end;
oracle循环小结
最新推荐文章于 2021-04-07 01:17:08 发布