开发者

Oracle中的循环之FOR循环、WHILE循环和LOOP循环详解

开发者 https://www.devze.com 2025-06-12 09:28 出处:网络 作者: 雷神乐乐
目录一、FOR循环1.FOR循环语法结构二、WHILE循环1.WHILE循环语法结构三、LOOP循环1.LOOP循环语法结构四、三个循环的区别(重要)总结oracle中的循环常用的有:FOR循环、WHILE循环和LOOP循环
目录
  • 一、FOR循环
    • 1.FOR循环语法结构
  • 二、WHILE循环
    • 1.WHILE循环语法结构
  • 三、LOOP循环
    • 1.LOOP循环语法结构
  • 四、三个循环的区别(重要)
    • 总结

      oracle中的循环常用的有:FOR循环、WHILE循环和LOOP循环

      一、FOR循环

      1.FOR循环语法结构

      DECLARE   --不声明变量,可以不写
             
      BEGIN
        FOR 循环变量 IN  1..10循环下限 .. 循环上限 LOOP ------循环变量 每次自增1
          循环体;
          END LOOP;
      END;

      示例:循环打印1~10

      declare
      begin
          for i in 1..10
              loop
                  DBMS_OUTPUT.PUT_LINE(i);
              end loop;
      end;

      Oracle中的循环之FOR循环、WHILE循环和LOOP循环详解

      示例:用户输入一个数字X,循环打印 1~X

      declare
          x number:=:input;
      begin
          for i in 1..x
              loop
                  DBMS_OUTPUT.PUT_LINE(i);
              end loop;
      end;

      Oracle中的循环之FOR循环、WHILE循环和LOOP循环详解

      示例:用户输入一个数字X,打印 1+2+3+..+X 的和是多少

      declare
          x number := :input;
          v number := 0;-- 需要有一个变量存放每次累加后的和
      begin
          for i in 1..x
              loop
                  v := v + i;
              end loop;
          DBMS_OUTPUT.PUT_LINE(v);
      end;

      Oracle中的循环之FOR循环、WHILE循环和LOOP循环详解

      Oracle中的循环之FOR循环、WHILE循环和LOOP循环详解

      计算 1 到 10 的数字中偶数的累加值

      declare
          v number := 0;-- 需要有一个变量存放每次累加后的和
      begin
          for i in 1..10
              loop
                  v := v + i;
              end loop;
          DBMS_OUTPUT.PUT_LINE(v);
      end;  -- 55

      二、WHILE循环

      1.WHILE循环语法结构

      DECLARE
      
      BEGIN
        WHILE 进入循环的条件 LOOP
          --循环体
        END LOOP;
      END;

      示例:循环打印1~10 以及 输出格式:

      • 编码:1
      • 编码:2
      • ...
      DECLARE
          v number := 1;  -- 声明循环变量
      BEGIN
          WHILE v <= 10
              loop
                  DBMS_OUTPUT.PUT_LINE('编码:' || v);
                  v := v + 1; -- 自增
              end loop;
      end;

      Oracle中的循环之FOR循环、WHILE循环和LOOP循环详解

      示例:打印100以内,所有偶数(大于0 从2开始到100结束)

      DECLARE
          v number := 2;
      BEGIN
          WHILE v <= 100
              loop
                  DBMS_OUTPUT.PUT_LINE(v);
                  v := v + 2; -- 自增
              end loop;
      end;

      示例:接收用户输入的数字 X,判断 X 大于10 则 打印"您输入的值过大,请重新输入!" ,如果不大于10,则打印 X 的阶乘,比如输入php 6 ,输出 "6的阶乘为 720"

      declare
          xandroid number := :input; -- 输入值
          i number :=android 1;-- 计数器
          v number := 1;-- 阶乘累加值
      begin
          if x > 10 then
              DBMS_OUTPUT.PUT_LINE('您输入的值过大,请重新输入!');
          else
              while i <= x -- 一定是计数器<=输入值(上限)
                  loop
                      v := v * i;
                      i := i + 1;-- 计数器+1
                  end loop;
              DBMS_OUTPUT.PUT_LINE(x || '的阶乘为:' || v);
          end if;
      end;

      综合练习:

      分别使用FOR循环和WHILE循环,计算1 到 10 的累加值

      -- FOR循环
      declare
          v number := 0; -- 存放累加值
      begin
          for i in 1..10
              loop
                  v := v + i;
              end loop;
          DBMS_OUTPUT.PUT_LINE('1~10的累加值为:' || v);
      end;
      
      -- WHILE循环
      declare
          i number := 1;-- 存放初始值
          v number := 0; -- 存放累加值
      begin
          while i <= 10
              loop
                  v := v + i;
                  i := i + 1;
              end loop;
          DBMS_OUTPUT.PUT_LINE('1~10的累加值为:' || v);
      end;

      分别使用FOR循环和WHILE循环,计算1 到 10 偶数的累加值

      -- FOR循环
      declare
          v number := 0; -- 存放累加值
      begin
          for i in 1..10
              loop
                  if mod(i, 2) = 0 then
                      v := v + i;
                  end if;
              end loop;
          DBMS_OUTPUT.PUT_LINE('1~10的偶数累加值为:' || v);
      end;
      
      -- WHILE循环
      declare
          i number := 1;-- 存放初始值
          v number := 0; -- 存放累加值
      begin
          while i <= 10
              loop
                  if mod(i, 2) = 0 then
                      v := v + i;
                  end if;
                  i := i + 1;
              end loop;
          DBMS_OUTPUT.PUT_LINE('1~10的偶数累加值为:' || v);
      end;

      三、LOOP循环

      1.LOOP循环语法结构

      DECLARE
        --声明
      BEGIN
        LOOP
         ------循环体
          IF 跳出该循环的条件 THEN
            EXIT;
          END IF;
        END LOOP;
      END;
      
      -----
      
      DECLARE
        --声明
      BEGIN
        LOOP
         ------循环体
          EXIT WHEN 跳出该循环的条件;
        END LOOP;
      END;

      示例:打印 1 到 100 的数字中偶数

      declare
          i number := 2;-- 初始值为2
      begin
          loop
              DBMS_OUTPUT.PUT_LINE(i);
              i := i + 2;
              if i > 100 then
                  exit ;
              end if;
          end loop;
      end;
      
      
      declare
          i number := 2;-- 初始值为2
      begin
          loop
              DBMS_OUTPUT.PUT_LINE(i);
              i := i + 2;
              exit when i > 100;
          end loop;
      end;

      练习:计算 1到 10奇数的累加 --loop

      declare
          i     number := 1;-- 初始值为1
          v_sum number := 0;-- 存放累加值
      begin
          loop
              if mod(i, 2) = 1 then
                  v_sum := v_sum + i;
              end if;
              i := i + 1;
              exit when i > 10;
          end loop;
          DBMS_OUTPUT.PUT_LINE('1-10奇数的累加值为:' || v_sum);
      end;
      
      -- 方法二
      declare
          i     number := 1;-- 初始值为1
          v_sum number := 0;-- 存放累加值
      begin
          loop
              v_sum := v_sum + i;
              i := i + 2;
              exit when i > 10;
          end loop;
          DBMS_OUTPUT.PUT_LINE('1-10奇数的累加值为:' || v_sum);
      end;

      四、三个循环的区别(重要)

      1.FOR 循环 不需要设置i自增,因为默认就是自增1

      • FOR i IN 10..100 LOOP
      • 要做的事情
      • END LOOP;

      2.WHILE 循环 需要设置变量自增,且循环条件放在 WHILE 后面

      • WHILE 循环的条件(J <=10) LOOP
      • 要做的事情
      • 变量的递增(递减)--变量肯定要重新赋值,不然就是死循环
      • END LOOP;

      3.LOOP 循环 需要设置变量自增,且退出循环的条件放到 IF 后

      • LOOP
      • 想做的事情
      • IF 退出循环的场景
      THEN EXIT;
      END IF;
      END LOOP;

      假设有100块钱,打算买100只鸡,公鸡一只5元,母鸡一只3元,小鸡3只1元,请问100块钱刚好花完,每种鸡至少买1只,每种鸡各可以买多少?

      BEGIN
          FOR g IN 1..20
              LOOP
                  FOR m IN 1..33
                      LOOP
             android             FOR x IN 1..100
                              LOOP
                                  IF g + m + x = 100 AND 5 * g + 3 * m + x / 3 = 100 THEN
                                      dbms_output.put_line('公鸡:' || g || ' 母鸡:' || m || ' 小鸡:' || x);
                                  END IF;
                              END LOOP;
                      END LOOP;
              END LOOP;
      END;

      Oracle中的循环之FOR循环、WHILE循环和LOOP循环详解

      总结http://www.devze.com

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号