度量快速开发平台-专业、快速的软件定制快开平台

标题: oracle的loop等循环语句的几个用法小例子 [打印本页]

作者: fteair    时间: 2020-2-21 18:14
标题: oracle的loop等循环语句的几个用法小例子
  1. --loop循环用法 (输出1到10)
  2. declare v_num number(2) := 0;
  3. begin
  4.   loop
  5.     v_num := v_num + 1;
  6.     exit when v_num > 10;
  7.     --上面退出循环也可以用下面3行
  8.      /* if(v_num > 9) then
  9.         exit;
  10.      end if;*/
  11.     dbms_output.put_line(v_num);
  12.   end loop;
  13. end;

  14. --while loop循环用法 (输出1到10)
  15. declare v_num number(2) := 0;
  16. begin
  17.   while v_num < 10 loop
  18.      v_num := v_num + 1;
  19.      dbms_output.put_line(v_num);
  20.   end loop;
  21. end;

  22. --for loop循环用法1 (输出1到10)
  23. declare v_num number(2) := 99;
  24. begin
  25.   for v_n in 1 .. v_num loop   
  26.      exit when v_n > 10;
  27.      dbms_output.put_line(v_n);
  28.   end loop;
  29. end;

  30. --for loop循环用法2 (输出某个表的序号、列数据)
  31. begin
  32.    for v_n in(select amount,rownum from tmp) loop
  33.       dbms_output.put_line(v_n.rownum || ' , ' || v_n.amount);
  34.    end loop;
  35. end;


  36. ---个循环打印某个月日历例子
  37. declare v_days number(2);
  38.         v_firstday number(2);
  39.         v_result varchar2(4000);
  40.         v_d varchar(100);
  41.         v_month date;
  42. begin
  43.    v_month := to_date('20170301','yyyymmdd');
  44.    v_result := to_char(v_month,'yyyy') || '年' || to_char(v_month,'mm') || '月' || chr(10) ||  '日 一 二 三 四 五 六' || chr(10);
  45.    select to_char(last_day(v_month), 'dd') into v_days from dual;--当月多少天
  46.    select to_char(trunc(v_month, 'mm'),'d') into v_firstday from dual;--当月第1天是星期几:1-7   
  47.    --1号所在星期几的之前每一天补3个空格
  48.    for v_week in 1 .. v_firstday - 1  loop
  49.       exit when v_firstday < 2;
  50.       v_result := v_result || '   ';     
  51.    end loop;
  52.    for v_date in 1 .. v_days loop
  53.       v_d := v_date;
  54.       if(length(v_date) = 1) then
  55.          v_d :=  ' '||v_date ;               
  56.       end if;
  57.       v_result := v_result || v_d || ' ';   
  58.       if(mod(v_date + v_firstday, 7) = 1) then
  59.           v_result := v_result || ' ' || chr(10);      
  60.       end if;
  61.    end loop;
  62.    dbms_output.put_line(v_result);
  63. end;
  64. /*
  65. 运行结果:

  66. 2017年03月
  67. 日 一 二 三 四 五 六
  68.           1  2  3  4
  69. 5  6  7  8  9 10 11
  70. 12 13 14 15 16 17 18
  71. 19 20 21 22 23 24 25
  72. 26 27 28 29 30 31
  73. */
复制代码



作者: 张兴康    时间: 2020-2-22 14:34

作者: fteair    时间: 2020-2-22 17:40
张兴康 发表于 2017-3-22 14:34


作者: 张兴康    时间: 2020-2-23 19:04





欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://plat.delit.cn/) Powered by Discuz! X3.2