loop循环:
问题:2+3=?
1+2+3=?
1+2+3+...+10=?
1+2+3+...+100=?
第一个加数,
最后一个数,
两个数之间相差的数
loop循环的语法结构:
loop --循环开始
if 循环结束的条件 then exit; end if;--条件成立时,结束循环
end loop;--循环结束
set serveroutput on;
loop循环的执行思路:
1.进入循环
2.判断循环继续的条件,是否成立;如果成立,就直接跳出循环;
3.如果不成立,执行判断后面,循环里面的其他代码一次;
4.重新执行第2步,一直到条件成立,循环结束为止;
declare
num1 number(8):=1;--加数
sum1 number(8):=0;--用来存放加法运算的结果
begin
loop
if num1>100 then exit;end if;
sum1:= sum1 + num1 ;
num1:= num1 + 1;
end loop;
dbms_output.put_line('求和结果:'||sum1);
end;
-------------------------------------------------------------------------------------------------
for循环
1+2+3+...+100=?
语法:
这里的变量1,不需要在declare里面定义,直接使用
for 新的变量1 in 循环的范围 loop
end loop;
实现:
declare
sum1 number(8):=0;
begin
for num1 in 1..100 loop
sum1:= sum1 + num1;
end loop;
dbms_output.put_line(sum1);
end;
----------------------------------------------------------------------------------------------------------
while循环
语法:
while 循环继续的条件 loop
end loop;
执行思路:
1.进入循环
2.判断:判断条件是否成立;如果不成立,循环结束;
3.如果条件成立,进入循环体,执行循环体中的代码;
4.第3步执行完毕后,重新跳转到第2步继续判断,一直到条件不成立,循环结束为止;
1+2+3+...+100=?
declare
num1 number(8):=1;
sum1 number(8):=0;
begin
while num1<=100 loop
sum1:=sum1+num1;
num1:=num1+1;
end loop;
dbms_output.put_line('while循环求和的结果:'||sum1);
end;
========================================================
1.分别求1-100内奇数/偶数的和,并打印出来
set serveroutput on;
declare
num1 number(8):=1;
sum1 number(8):=0;
sum2 number(8):=0;
begin
loop
sum1:=sum1+num1;
sum2:=sum2+num1+1;
num1:=num1+2;
if num1>100 then exit;
end if;
end loop;
dbms_output.put_line('1-100内奇数的和:'||sum1);
dbms_output.put_line('1-100内偶数的和:'||sum2);
end;
--------------------------------------------------------------------------
2.求1-100内能被3整除,不能被5整除的数字
DECLARE
n number(8):=1;
BEGIN
loop
n:=n+1;
if n>100 then exit;
elsif MOD(n,3)=0 and MOD(n,5)<>0 then dbms_output.put_line(N||', ');
end if;
end loop;
END;
方法二:for循环
begin
for i in 1..100 loop
if mod(i,3)=0 and mod(i,5)<>0 then dbms_output.put_line(i);
elsif i>100 then exit;
end if;
end loop;
end;
--------------------------------------------------------------------------------------------------------------------
3..打印乘法表
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
...需要两层循环,外层循环控制第一个乘数,内层循环控制第二个乘数。
declare
i int:=1;
j int:=1;
begin
loop
loop
dbms_Output.put(i||'*'||j||'='||i*j||' ');
j:=j+1;
exit
when j>i;
end loop;
dbms_output.put_line('');
i:=i+1;
j:=1;
exit
when i>9;
end loop;
end;
方法二:for循环
declare
begin
for i in 1..9 loop
for j in 1..i loop
dbms_output.put(i||'*'||j||'='||i*j||' ');
end loop;
dbms_output.new_line;
end loop;
end;
方法三:while 循环
declare
i int:=0;
j int:=0;
begin
while i<=9 loop
j:=1;
while j<=i
loop
dbms_Output.put(i||'*'||j||'='||i*j||' ');
dbms_output.put('');
j:=j+1;
end loop;
dbms_output.new_line;
i:=i+1;
end loop;
end;
-------------------------------------------------------------------------------------------------------------
4..求所有的水仙花数
水仙花数是一个三位数,每一位数字的3次幂的和正好等于这个数本身。
declare
v_num1 number;
v_num2 number;
v_num3 number;
v_num number:=100;
begin
while v_num<1000
loop
v_num1:=mod(v_num,10);--个位132,2
v_num2:=mod(floor(v_num/10),10);--十位132,3
v_num3:=floor(v_num/100); --百位132,1
if v_num=power(v_num1,3)+power(v_num2,3)+power(v_num3,3) then
dbms_output.put(v_num||' ');
end if;
v_num:=v_num+1;
end loop;
dbms_output.put_line(' ');
end;