当前位置: 首页 > news >正文

Oracle中的循环——FOR循环、WHILE循环和LOOP循环

目录

一、FOR循环

1.FOR循环语法结构

二、WHILE循环

1.WHILE循环语法结构

三、LOOP循环

1.LOOP循环语法结构

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


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

一、FOR循环

1.FOR循环语法结构

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

示例:循环打印1~10

declare
beginfor i in 1..10loopDBMS_OUTPUT.PUT_LINE(i);end loop;
end;

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

declarex number:=:input;
beginfor i in 1..xloopDBMS_OUTPUT.PUT_LINE(i);end loop;
end;

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

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

                ​​​​​​​        

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

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

二、WHILE循环

1.WHILE循环语法结构

DECLAREBEGINWHILE 进入循环的条件 LOOP--循环体END LOOP;
END;

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

DECLAREv number := 1;  -- 声明循环变量
BEGINWHILE v <= 10loopDBMS_OUTPUT.PUT_LINE('编码:' || v);v := v + 1; -- 自增end loop;
end;

 

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

DECLAREv number := 2;
BEGINWHILE v <= 100loopDBMS_OUTPUT.PUT_LINE(v);v := v + 2; -- 自增end loop;
end;

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

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

综合练习:

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

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

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

-- FOR循环
declarev number := 0; -- 存放累加值
beginfor i in 1..10loopif mod(i, 2) = 0 thenv := v + i;end if;end loop;DBMS_OUTPUT.PUT_LINE('1~10的偶数累加值为:' || v);
end;-- WHILE循环
declarei number := 1;-- 存放初始值v number := 0; -- 存放累加值
beginwhile i <= 10loopif mod(i, 2) = 0 thenv := v + i;end if;i := i + 1;end loop;DBMS_OUTPUT.PUT_LINE('1~10的偶数累加值为:' || v);
end;

三、LOOP循环

1.LOOP循环语法结构

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

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

declarei number := 2;-- 初始值为2
beginloopDBMS_OUTPUT.PUT_LINE(i);i := i + 2;if i > 100 thenexit ;end if;end loop;
end;declarei number := 2;-- 初始值为2
beginloopDBMS_OUTPUT.PUT_LINE(i);i := i + 2;exit when i > 100;end loop;
end;

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

declarei     number := 1;-- 初始值为1v_sum number := 0;-- 存放累加值
beginloopif mod(i, 2) = 1 thenv_sum := v_sum + i;end if;i := i + 1;exit when i > 10;end loop;DBMS_OUTPUT.PUT_LINE('1-10奇数的累加值为:' || v_sum);
end;-- 方法二
declarei     number := 1;-- 初始值为1v_sum number := 0;-- 存放累加值
beginloopv_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只,每种鸡各可以买多少?

BEGINFOR g IN 1..20LOOPFOR m IN 1..33LOOPFOR x IN 1..100LOOPIF g + m + x = 100 AND 5 * g + 3 * m + x / 3 = 100 THENdbms_output.put_line('公鸡:' || g || ' 母鸡:' || m || ' 小鸡:' || x);END IF;END LOOP;END LOOP;END LOOP;
END;

http://www.lqws.cn/news/90883.html

相关文章:

  • 鸿蒙版Taro 搭建开发环境
  • 腾讯 ovCompose 开源,Kuikly 鸿蒙和 Compose DSL 开源,腾讯的“双”鸿蒙方案发布
  • Oracle 用户/权限/角色管理
  • Go基础|map入门
  • 【灵动Mini-F5265-OB】vscode+gcc工程创建、下载、调试
  • React从基础入门到高级实战:React 高级主题 - React 微前端实践:构建可扩展的大型应用
  • 如何监测光伏系统中的电能质量问题?分布式光伏电能质量解决方案
  • 【论文解读】ReAct:从思考脱离行动, 到行动反馈思考
  • 【Doris基础】Apache Doris中的Fragment概念详解
  • Vue3中使用Echarts图表步骤-demo
  • 通信算法之281:大疆DJI无人机ID-DJI DroneID开源工程-相关问题-协议信息问题
  • 20250603在荣品的PRO-RK3566开发板的Android13下的命令行查看RK3566的温度
  • 学习路之PHP--easyswoole使用视图和模板
  • 大语言模型评测体系全解析(上篇):基础框架与综合评测平台
  • 用户管理页面(解决toggleRowSelection在dialog用不了的隐患,包含el-table的plus版本的组件)
  • 剑指offer15_数值的整数次方
  • Elasticsearch | 如何将修改已有的索引字段类型并迁移数据
  • 云原生周刊:探索 Gateway API v1.3.0
  • 点击启动「高效模式」:大腾智能 CAD 重构研发设计生产力
  • Go 为何天生适合云原生?
  • 项目前置知识——不定参以及设计模式
  • MYSQL索引详解
  • 平台化 LIMS 系统架构 跨行业协同与资源共享的实现路径
  • Ubuntu 22.04 安装 Nacos 记录
  • ubuntu 20.04挂载固态硬盘
  • Ubuntu22.04安装MinkowskiEngine
  • 安装和配置 Nginx 和 Mysql —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录6
  • 解决 Ubuntu 20.04 虚拟机中 catkin_make 编译卡死问题
  • seafile:ubuntu搭建社区版seafile12.0
  • Starrocks Full GC日志分析