oracle的loop

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

--loop循环用法 (输出1到10) declare v_num number(2) := 0; begin loop v_num := v_num + 1; exit when v_num > 10; --上面退出循环也可以用下面3行 /* if(v_num > 9) then exit; end if;*/ dbms_output.put_line(v_num); end loop; end; --while loop循环用法 (输出1到10) declare v_num number(2) := 0; begin while v_num < 10 loop v_num := v_num + 1; dbms_output.put_line(v_num); end loop; end; --for loop循环用法1 (输出1到10) declare v_num number(2) := 99; begin for v_n in 1 .. v_num loop exit when v_n > 10; dbms_output.put_line(v_n); end loop; end; --for loop循环用法2 (输出某个表的序号、列数据) begin for v_n in(select amount,rownum from tmp) loop dbms_output.put_line(v_n.rownum || ' , ' || v_n.amount); end loop; end; ---个循环打印某个月日历例子 declare v_days number(2); v_firstday number(2); v_result varchar2(4000); v_d varchar(100); v_month date; begin v_month := to_date('20170301','yyyymmdd'); v_result := to_char(v_month,'yyyy') || '' || to_char(v_month,'mm') || '' || chr(10) || '日 一 二 三 四 五 六' || chr(10); select to_char(last_day(v_month), 'dd') into v_days from dual;--当月多少天 select to_char(trunc(v_month, 'mm'),'d') into v_firstday from dual;--当月第1天是星期几:1-7 --1号所在星期几的之前每一天补3个空格 for v_week in 1 .. v_firstday - 1 loop exit when v_firstday < 2; v_result := v_result || ' '; end loop; for v_date in 1 .. v_days loop v_d := v_date; if(length(v_date) = 1) then v_d := ' '||v_date ; end if; v_result := v_result || v_d || ' '; if(mod(v_date + v_firstday, 7) = 1) then v_result := v_result || ' ' || chr(10); end if; end loop; dbms_output.put_line(v_result); end; /* 运行结果: 2017年03月 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 */

oracle的双重for循环

    create or replace procedure test_procedure is  
      --a表游标定义  
      cursor a_cursor is  
      select substr(mc,0,2) as str ,mc as mcs   from t_bz_zd_xzqh_jc;  
      --b表游标定义  
      cursor b_cursor(str1 string) is  
        SELECT bm FROM t_bz_zd_xzqh where mc like  '%' || str1 || '%'; -- instr(mc, str1) > 0;  
    begin  
      for a_cur in a_cursor loop  
        for b_cur in b_cursor(a_cur.str) loop  
          --这里是你要执行的操作,比如insert到c  
          --insert into c values (b_cur.id);  
          update t_bz_zd_xzqh_jc set bh= b_cur.bm where mc = a_cur.mcs ;  
          commit;  
        end loop;  
      end loop;  
        
      end;  
原文地址:https://www.cnblogs.com/520future/p/8822229.html