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;
示例:用户输入一个数字x,循环打印 1~x
declare
x number:=:input;
begin
for i in 1..x
loop
dbms_output.put_line(i);
end loop;
end;
示例:用户输入一个数字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;

计算 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;
示例:打印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 的阶乘,比如输入 6 ,输出 "6的阶乘为 720"
declare
x number := :input; -- 输入值
i number := 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
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;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论