--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 */