-------------------------循环控制:重复的执行某一些操作,以得到想要的结果
有3种循环的语法
1、LOOP循环
2、WHILE循环
3、FOR循环
--------------LOOP循环
--语法结构:
DECLARE
--声明部分
BEGIN
--逻辑体
LOOP
--循环逻辑体
IF 满足退出循环的条件 THEN
EXIT;
END IF;
--退出循环的简写
EXIT WHEN 退出循环的条件;
END LOOP;
END;
--需要注意的是:
1、不管三七二十一先进入循环,然后再在循环体里面想办法退出
2、LOOP循环不要忘记退出循环,否则会一直循环下去
3、最后的 END LOOP; 不要忘
--比如:打印1+2+...+100的结果
DECLARE
X NUMBER := 0;
Y NUMBER := 0;
BEGIN
LOOP
X := X + 1;
Y := Y + X;
/* IF X >= 100 THEN
EXIT;
END IF; */
EXIT WHEN X >= 100;
END LOOP;
DBMS_OUTPUT.PUT_LINE(Y);
END;
-------------WHILE循环
DECLARE
--声明部分
BEGIN
--逻辑体
WHILE 满足进入循环条件 LOOP
--循环逻辑体
END LOOP;
END;
--需要注意的是:
1、它跟LOOP循环是一个相反的。一个进入后满足退出的条件然后退出,一个是满足进入的条件然后进入
2、当满足一个条件的时候,就进入循环,不满时,就退出循环
3、当一开始就不满足的时候,就跳过该循环操作
--比如:打印1+2+...+100的结果
DECLARE
X NUMBER := 0;
Y NUMBER := 0;
BEGIN
WHILE X < 100 LOOP
X := X + 1;
Y := Y + X;
END LOOP;
DBMS_OUTPUT.PUT_LINE(Y);
END;
------------------FOR循环
DECLARE
--声明部分
BEGIN
--逻辑体
FOR 循环变量 IN 循环下限 .. 循环上限 LOOP
--循环逻辑体
END LOOP;
END;
--需要注意的是:
1、FOR循环的前提是知道要循环多少次
2、用循环下限到循环上限的范围来固定这个次数
3、循环变量在这个范围内每次递增1(就可以实现要循环多少次)
4、循环变量可以定义/声明,也可以不定义/不声明
--比如:打印1+2+...+100的结果
DECLARE
X NUMBER := 0;
Y NUMBER := 0;
BEGIN
FOR Z IN 100 .. 199 LOOP --100 .. 199 只是为了确定循环次数是100次
X := X + 1;
Y := Y + X;
END LOOP;
DBMS_OUTPUT.PUT_LINE(Y);
END;
--特殊的时候:当变量的变化路径跟循环变量的变化路径(每次加1)一致的时候,可以就直接用循环变量的值来代替变量的值
--比如:打印1+2+...+100的结果
DECLARE
Y NUMBER := 0;
BEGIN
FOR X IN 1 .. 100 LOOP ---这个时候,循环变量的值就不只是为了确定循环次数了,同时还要被使用
Y := Y + X;
END LOOP;
DBMS_OUTPUT.PUT_LINE(Y);
END;
--小练习一把:输入一个数,判断该数是否是质数(只能被1和其本身整数),如果是打印该数,如果不是打印 该数“不是质数”
DECLARE
X NUMBER := &输入一个数;
Y NUMBER := 0;
BEGIN
IF X <= 1 THEN
DBMS_OUTPUT.PUT_LINE('输入一个大于1的整数');
ELSE
IF MOD(X, 1) != 0 THEN
DBMS_OUTPUT.PUT_LINE('输入一个整数');
ELSE
FOR Z IN 1 .. X LOOP
IF MOD(X, Z) = 0 THEN
Y := Y + 1; --记录 X 除以 1 到X 中间所有的数的整除的次数
END IF;
END LOOP;
IF Y = 2 THEN
DBMS_OUTPUT.PUT_LINE(X || '是质数');
ELSE
DBMS_OUTPUT.PUT_LINE(X || '不是质数');
END IF;
END IF;
END IF;
END;