oracle循环小结

-- 在编写循环控制结构的时候,可以使用基本循环,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;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值