--Oracle 练习题 20131021 for 循环练习
--1、用for循环实现一个倒置的乘法表。
begin
for i in reverse 1 .. 9 loop
for j in reverse 1 .. i loop
dbms_output.put(i || 'x' || j || '=' || i * j || ' ');
end loop;
dbms_output.put_line('');
end loop;
end;
--2、打印1-100之间所有的素数。
declare
v_temp number := 0;
begin
for i in 2 .. 100 loop
for j in 1 .. sqrt(i) loop
if mod(i,j) = 0 then
v_temp := v_temp + 1;
end if;
end loop;
if v_temp = 1 then
dbms_output.put_line(i);
end if;
v_temp := 0;
end loop;
end;
--3、输入两个数求它们的最大公约数和最小公倍数。
declare
v_a number := &inputa;
v_b number := &inputb;
v_rsa number;
v_rsb number;
begin
for i in 1 .. (v_a+v_b)/2 loop
if mod(v_a,i)=0 and mod(v_b,i)=0 then
v_rsa := i;
end if;
end loop;
for j in reverse 1 .. v_a*v_b loop
if mod(j,v_a)=0 and mod(j,v_b)=0 then
v_rsb := j;
end if;
end loop;
dbms_output.put_line('最大公约数:' || v_rsa);
dbms_output.put_line('最小公倍数:' || v_rsb);
end;
--4、打印如下菱形
-- *
-- ***
-- *****
-- *******
-- *****
-- ***
-- *
begin
--上半部分
for i in 1..4 loop
for j in 1..(5-i) loop
dbms_output.put(' ');
end loop;
for k in 1..(2*i-1) loop
dbms_output.put('*');
end loop;
dbms_output.put_line('');
end loop;
--下半部分
for i in 1..3 loop
for j in 1..i+1 loop
dbms_output.put(' ');
end loop;
for k in 1..7-(2*i) loop
dbms_output.put('*');
end loop;
dbms_output.put_line('');
end loop;
end;