1.简单的循环
 以loop关键字开始, exit when子句退出循环, end loop子句为循环结束标志。
 DECLARE
 PI   CONSTANT NUMBER (9, 7) := 3.1415926;
 RADIUS        INTEGER (5);
 AREA          NUMBER (14, 2);
 BEGIN
 RADIUS := 3;
 LOOP
 AREA := PI * POWER (RADIUS, 2);
 DBMS_OUTPUT.put_line ('半径:' || RADIUS || '; 面积:'|| AREA);
 RADIUS := RADIUS + 1;
 EXIT WHEN AREA > 100;
 END LOOP;
 END;
 2,简单的游标循环
%FOUND 可在游标中取一个记录
%NOTFOUND 不能从游标中再取一个记录
%ISOPEN 游标已经打开
%ROWCOUNT 迄今为止从游标中取出的行数
    
exit when rad_cursor%NOTFOUND;/*如果游标中取不到值则推出循环*/
 %FOUND 可在游标中取一个记录
%NOTFOUND 不能从游标中再取一个记录
%ISOPEN 游标已经打开
%ROWCOUNT 迄今为止从游标中取出的行数
exit when rad_cursor%NOTFOUND;/*如果游标中取不到值则推出循环*/
3.FOR循环
 DECLARE
 PI   CONSTANT NUMBER (9, 7) := 3.1415926;
 RADIUS        INTEGER (5);
 AREA          NUMBER (14, 2);
 BEGIN
 FOR RADIUS IN 1 .. 7
 LOOP
 AREA := PI * POWER (RADIUS, 2);
 DBMS_OUTPUT.put_line ('半径:' || RADIUS || '; 面积:'|| AREA);
 END LOOP;
 END;
 4.游标循环
 DECLARE
 PI   CONSTANT NUMBER (9, 7) := 3.1415926;
 AREA          NUMBER (14, 2);
  CURSOR RAD_CURSOR
 IS
 SELECT * FROM RADIUS_VAS;
  BEGIN
 FOR RAD_VAL IN RAD_CURSOR
 LOOP
 AREA := PI * POWER (RAD_VAL.RADIUS, 2);
 DBMS_OUTPUT.put_line ('半径:' || RAD_VAL.RADIUS|| '; 面积:' || AREA);
 END LOOP;
 END;
 5.WHILE循环
 DECLARE
 PI   CONSTANT NUMBER (9, 7) := 3.1415926;
 RADIUS        INTEGER (5);
 AREA          NUMBER (14, 2);
 BEGIN
 RADIUS := 3;
 WHILE RADIUS <= 7
 LOOP
 AREA := PI * POWER (RADIUS, 2);
 DBMS_OUTPUT.PUT_LINE ('半径:' || RADIUS || '; 面积:' || AREA);
 RADIUS := RADIUS + 1;
 END LOOP;
 END;
 6.CASE语句
 DECLARE
 pi   CONSTANT NUMBER (9, 7) := 3.1415926;
 area          NUMBER (14, 2);
  CURSOR rad_cursor
 IS
 SELECT * FROM RADIUS_VALS;
  rad_val       rad_cursor%ROWTYPE;
 BEGIN
 OPEN rad_cursor;
  LOOP
 FETCH rad_cursor INTO rad_val;
  EXIT WHEN rad_cursor%NOTFOUND;
 area := pi * POWER (rad_val.radius, 2);
  CASE
 WHEN rad_val.Radius = 3
 THEN
 DBMS_OUTPUT.put_line ('半径:' || rad_val.radius || '; 面积:' || area);
 WHEN rad_val.Radius = 4
 THEN
 DBMS_OUTPUT.put_line ('半径:' || rad_val.radius || '; 面积:' || area);
 WHEN rad_val.Radius = 10
 THEN
 DBMS_OUTPUT.put_line ('半径:' || rad_val.radius || '; 面积:' || area);
 ELSE
 RAISE CASE_NOT_FOUND;
 END CASE;
 END LOOP;
 END;
 http://blog.csdn.net/yxc369/article/details/1470780