Oracle 练习题 20131021 for 循环练习

--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;

你可能感兴趣的:(Oracle)