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

article/2025/6/6 23:43:45

目录

一、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.hkcw.cn/article/LSpIfHJygv.shtml

相关文章

ubuntu 20.04挂载固态硬盘

我们有个工控机&#xff0c;可以接入一个固态硬盘。将固态硬盘插好后&#xff0c;就要进行挂载。在AI的指导下&#xff0c;过程并不顺利。记录如下&#xff1a; 1、检查硬盘是否被识别 安装好硬盘后&#xff0c;运行以下命令来检查Linux系统是否已识别新硬盘&#xff1a; …

SAP 自动编号的使用

1、NUMBER_RANGE_ENQUEUE用于锁定编号范围对象&#xff0c;防止多用户并发访问冲突 2、NUMBER_RANGE_DEQUEUE用于解锁已维护的编号范围对象。 3、此外&#xff0c;还提到了NUMBER_GET_NEXT函数模块&#xff0c;用于获取编号范围内的下一个号码。 文章目录 创建编号范围程序实现…

Python趣学篇:从零打造智能AI井字棋游戏(Python + Tkinter + Minimax算法)

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 专栏介绍&#xff1a;《Python星球日记》 目录 &#x1f3ae; 前言一、项目概述与技术…

[定昌linux开发板]设置密码策略

找到etc/pam.d/目录下的common-password 2.先把common-password给复制一份&#xff0c;避免改错了 可以看到新增了一个common-password.bak文件 3.打开common-password,增加密码策略 输入&#xff1a; sudo vi /etc/pam.d/common-passwod 打开common-password文件 点击&…

Godot 敌人生成半径和围墙不匹配,导致敌人错误的生成在围墙外的解决代码

一、原视频 3. Preventing Invalid Spawning 二、原代码 func get_spawn_position():var player get_tree().get_first_node_in_group("player") as Node2Dif player null:return Vector2.ZEROvar spawn_position Vector2.ZEROvar random_direction Vector2.RIG…

LabVIEW磁悬浮轴承传感器故障识别

针对工业高端装备中主动磁悬浮轴承&#xff08;AMB&#xff09;的位移传感器故障检测需求&#xff0c;基于 LabVIEW 平台构建了一套高精度故障识别系统。通过集成品牌硬件与 LabVIEW 的信号处理能力&#xff0c;实现了传感器探头故障的实时监测与精准定位&#xff0c;解决了传统…

Qt开发:QThreadPool的介绍和使用

文章目录 一、QThreadPool 简介二、常用函数简介三、完整示例 一、QThreadPool 简介 QThreadPool 是 Qt 提供的用于高效管理线程资源的类。它通过线程池的方式管理和复用线程&#xff0c;适合处理大量、短时间运行的任务&#xff0c;避免频繁创建和销毁线程带来的性能开销。 常…

蚂蚁感冒--思维

1.相遇后不用考虑转头&#xff0c;继续走就可以 2.思维&#xff0c;不只是傻傻的模拟&#xff0c;要总结出规律&#xff0c;什么情况一定可以感染&#xff0c;然后感染之后再怎么这么样 P8611 [蓝桥杯 2014 省 AB] 蚂蚁感冒 - 洛谷 #include<bits/stdc.h> using names…

non-autoregressive sequence generation

非自回归non-autoregressive 传统rnn是autoregressive,而且encode和decode都是根据上一个input/output,这样花费的时间就和句子长度成正比 transformer的输入是并行的,但是decode阶段还是autoregressive 单纯把影像当成 NM 个独立像素去拟合&#xff0c;会缺乏像素之间的依赖…

实验设计与分析(第6版,Montgomery著,傅珏生译) 第10章拟合回归模型10.9节思考题10.1 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第10章拟合回归模型10.9节思考题10.1 R语言解题。主要涉及线性回归、回归的显著性、回归系数的置信区间。 vial <- seq(1, 10, 1) Viscosity <- c(160,171,175,182,184,181,188,19…

如何选择最高效的沟通方式?

日常沟通主要分为文字、语音和面对面三种形式&#xff0c;选择何种方式需根据沟通内容的复杂程度、决策难度及互动需求综合判断。 当沟通内容简单明确、以信息传递为主或涉及基础决策时&#xff0c;文字或语音是更高效的选择。这类方式不仅能降低时间成本&#xff0c;还能避免…

VueScan:全能扫描,高清输出

在数字化办公和图像处理的领域&#xff0c;扫描仪扮演着不可或缺的角色。无论是文档的数字化存档、照片的高清复制&#xff0c;还是创意项目的素材采集&#xff0c;一款性能卓越、操作便捷的扫描软件能大幅提升工作效率和成果质量。VueScan正是这样一款集多功能于一身的扫描仪软…

【Hot 100】279. 完全平方数

目录 引言完全平方数我的解题dp总结 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;【Hot 100】279. 完全平方数❣️ 寄语&#xff1a;书到用时方恨少&#xff0c;事非经过不知难&#xff01; 引言 今天又…

Alita:通过 MCP 实现自主进化的通用 AI 代理

Alita 是一个创新的通用 AI 代理&#xff0c;采用极简主义设计哲学&#xff0c;强调 minimal predefinition&#xff08;最小预定义&#xff09;和 maximal self-evolution&#xff08;最大自主进化&#xff09;。通过利用 Model Context Protocols (MCPs)&#xff0c;Alita 能…

关于物联网的基础知识(二)——物联网体系结构分层

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于物联网的基础知识&#xff08;二&a…

大语言模型评测体系全解析(上篇):基础框架与综合评测平台

文章目录 一、评测体系的历史演进与技术底座&#xff08;一&#xff09;发展历程&#xff1a;从单任务到全维度评测1. 2018年前&#xff1a;单数据集时代的萌芽2. 2019-2023年&#xff1a;多任务基准的爆发式增长3. 2024年至今&#xff1a;动态化、场景化、多模态体系成型关键节…

SpringAI系列 - MCP篇(三) - MCP Client Boot Starter

目录 一、Spring AI Mcp集成二、Spring AI MCP Client Stater三、spring-ai-starter-mcp-client-webflux集成示例3.1 maven依赖3.2 配置说明3.3 集成Tools四、通过SSE连接MCP Server五、通过STDIO连接MCP Server六、通过JSON文件配置STDIO连接一、Spring AI Mcp集成 Spring AI…

MyBatis 一级缓存与二级缓存

一、缓存概述 MyBatis 提供两级缓存机制提升查询性能&#xff1a; 一级缓存&#xff1a;SqlSession 级别&#xff0c;默认开启 二级缓存&#xff1a;Mapper 级别&#xff0c;需手动开启 两者协同工作&#xff0c;形成查询数据优先级&#xff1a;二级缓存 → 一级缓存 → 数据…

008房屋租赁系统技术揭秘:构建智能租赁服务生态

房屋租赁系统技术揭秘&#xff1a;构建智能租赁服务生态 在房地产租赁市场日益活跃的当下&#xff0c;房屋租赁系统成为连接房东与租客的重要数字化桥梁。该系统集成用户管理、房屋信息等多个核心模块&#xff0c;面向管理员、房东和用户三类角色&#xff0c;通过前台展示与后…

HTTP协议完全指南:从请求响应到HTTPS安全机制

文章目录 一、HTTP协议中的基本概念1.HTTP协议介绍&#xff08;1&#xff09;协议&#xff08;2&#xff09;传输&#xff08;3&#xff09;超文本 2.统一资源定位符&#xff08;URL&#xff09; 二、HTTP协议中的请求和响应1.HTTP客户端请求消息&#xff08;1&#xff09;请求…