最近有些闲,看完了concept突然有种空虚的感觉。闲话不多说。
用PLSQL写了一个打印日历的功能。
create or replace package display_date is procedure display_spec_mon (year number , month number) ;end ;
create or replace package body display_date is type t_conv_mon is table of varchar2(10) ; conv_mon t_conv_mon := t_conv_mon() ; procedure display_title (year number , month number) is begin dbms_output.put_line(year||'.'||conv_mon(month)) ; dbms_output.put_line(lpad(' ',21,'-')) ; dbms_output.put_line('Su Mo Tu We Th Fr Sa'); end ; procedure display_spec_mon (year number , month number) is current_mon date ; current_line varchar2(21) ; begin-- dbms_output.put_line (year||lpad(month||'',2,'0')||'01') ; display_title (year,month) ; current_mon := to_date(year||lpad(month||'',2,'0')||'01','yyyymmdd') ; for i in 1 .. (add_months(current_mon,1)-current_mon) loop if i = 1 then current_line := current_line || (lpad(' ',(to_char(current_mon+i-1,'D')-1)*3,'-- ')); end if ; current_line := current_line || rpad(i||'',3,' '); if length(current_line)>=21 then dbms_output.put_line(current_line) ; current_line := '' ; end if ; end loop ; dbms_output.put_line(current_line) ; end ; begin conv_mon.extend(12); conv_mon(1) := 'January' ; conv_mon(2) := 'February' ; conv_mon(3) := 'Marcy' ; conv_mon(4) := 'April' ; conv_mon(5) := 'May' ; conv_mon(6) := 'June' ; conv_mon(7) := 'July' ; conv_mon(8) := 'August' ; conv_mon(9) := 'September' ; conv_mon(10) := 'October' ; conv_mon(11) := 'November' ; conv_mon(12) := 'December' ;end ;
执行结果:
[email protected]> exec display_date.display_spec_mon(2013,10) ;2013.October--------------------Su Mo Tu We Th Fr Sa-- -- 1 2 3 4 56 7 8 9 10 11 1213 14 15 16 17 18 1920 21 22 23 24 25 2627 28 29 30 31PL/SQL procedure successfully completed.[email protected]> exec display_date.display_spec_mon(2012,12) ;2012.December--------------------Su Mo Tu We Th Fr Sa-- -- -- -- -- -- 12 3 4 5 6 7 89 10 11 12 13 14 1516 17 18 19 20 21 2223 24 25 26 27 28 2930 31PL/SQL procedure successfully completed.