oracle的loop等循环语句的几个用法小例子[转]

[sql] view plain copy print?
  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.   
  15. --while loop循环用法 (输出1到10)  
  16. declare v_num number(2) := 0;  
  17. begin   
  18.   while v_num < 10 loop  
  19.      v_num := v_num + 1;  
  20.      dbms_output.put_line(v_num);  
  21.   end loop;    
  22. end;  
  23.   
  24. --for loop循环用法1 (输出1到10)  
  25. declare v_num number(2) := 99;  
  26. begin  
  27.   for v_n in 1 .. v_num loop      
  28.      exit when v_n > 10;  
  29.      dbms_output.put_line(v_n);  
  30.   end loop;  
  31. end;  
  32.   
  33. --for loop循环用法2 (输出某个表的序号、列数据)  
  34. begin  
  35.    for v_n in(select amount,rownum from tmp) loop   
  36.       dbms_output.put_line(v_n.rownum || ' , ' || v_n.amount);  
  37.    end loop;  
  38. end;  
  39.   
  40.   
  41. ---个循环打印某个月日历例子  
  42. declare v_days number(2);   
  43.         v_firstday number(2);  
  44.         v_result varchar2(4000);  
  45.         v_d varchar(100);  
  46.         v_month date;  
  47. begin  
  48.    v_month := to_date('20170301','yyyymmdd');  
  49.    v_result := to_char(v_month,'yyyy') || '年' || to_char(v_month,'mm') || '月' || chr(10) ||  '日 一 二 三 四 五 六' || chr(10);  
  50.    select to_char(last_day(v_month), 'dd') into v_days from dual;--当月多少天  
  51.    select to_char(trunc(v_month, 'mm'),'d') into v_firstday from dual;--当月第1天是星期几:1-7      
  52.    --1号所在星期几的之前每一天补3个空格  
  53.    for v_week in 1 .. v_firstday - 1  loop  
  54.       exit when v_firstday < 2;  
  55.       v_result := v_result || '   ';        
  56.    end loop;  
  57.    for v_date in 1 .. v_days loop  
  58.       v_d := v_date;  
  59.       if(length(v_date) = 1) then  
  60.          v_d :=  ' '||v_date ;                  
  61.       end if;  
  62.       v_result := v_result || v_d || ' ';       
  63.       if(mod(v_date + v_firstday, 7) = 1) then  
  64.           v_result := v_result || ' ' || chr(10);         
  65.       end if;  
  66.    end loop;    
  67.    dbms_output.put_line(v_result);  
  68. end;  
  69. /*  
  70. 运行结果:  
  71.   
  72. 2017年03月  
  73. 日 一 二 三 四 五 六  
  74.           1  2  3  4    
  75.  5  6  7  8  9 10 11    
  76. 12 13 14 15 16 17 18    
  77. 19 20 21 22 23 24 25    
  78. 26 27 28 29 30 31   
  79. */ 

原文地址: http://blog.csdn.net/gdjlc/article/details/64125097

你可能感兴趣的:(oracle的loop等循环语句的几个用法小例子[转])