初学Oracle 对一些的loop{//循环体}end loop块不太明白
在一些程序 code里
比如
while(flag = true) {
  //循环体
}再比如
for(int i = 0; i < 5; i++){
  //循环体
}这里结束循环的标志很明确 第一个是当flag = false时结束循环 , 第二个是在 i >= 5时结束循环。
但是我看了一些loop的循环体,没有明确标识什么情况下end loop。
请指点一二,谢谢。

解决方案 »

  1.   

    END LOOP 是指循环结束,在循环的程序块的结尾处写。
    LOOP
    ..
    END LOOP
    就好比程序中的BEGIN ..END;
    跳出循环是用EXIT;例如:declare
    i number;
    begin
    i:=0;
    loop
      i:=i+1;
      dbms_output.put_line(i);
      if i>5 then
        exit;
      end if;
    end loop;
    end;
      

  2.   

    先谢谢2楼,你贴的代码我可以看懂。用if语句来判定条件,然后满足条件后去执行exit。
    我书上有这样一段代码,我就看不明白。
    Begin
      for x in (select * from t)
      loop
        insert into t values( x.username, x.user_id, x.created);
      end loop;
    end;
    /在我看来这里只给出了一个循环体(loop和end loop之间的内容)。
    但是并没有说什么情况下结束执行,也就是执行end loop这一句。
    如果在其中加上if xxx --> exit; 我就能理解了。可是这段代码里没有类似的语句。
      

  3.   


    for x in (select * from t)就是判定循环是否结束
      

  4.   

    不知道你对JAVA或者C++中的FOR循环是否有所了解,你贴出的代码和FOR循环大同小异。
    for x in (select * from t) 
    LOOP
    ...
    END LOOP;
    中的SELECT * FROM T这句是产生一个结果集,通过FOR X IN来对这个结果进行遍历。当遍历结束后,自动结束循环。
    下面这个代码可能你会更好理解一些。DECLARE
    I INTEGER;
    BEGIN
    FOR I IN 1..10
    LOOP
    IF I=3 THEN EXIT;
    ELSE dbms_output.put_line(i);
    END IF;
    END LOOP;
    END;
      

  5.   

    明白了,谢谢你。我之前是做J2EE的,从java语法的角度解释我就清楚多了。3Q