create or replace procedure disp_cal_month(month number)
is
week varchar2(8);
day_num number;
begin
day_num := to_number(last_day(to_date(month,'mm'))-to_date(month,'mm')+1);
week :=to_char(to_date(month,'mm'),'day');
case week
when '星期一' then null;
when '星期二' then dbms_output.put(chr(9));
when '星期三' then dbms_output.put(chr(9)||chr(9));
when '星期四' then dbms_output.put(chr(9)||chr(9)||chr(9));
when '星期五' then dbms_output.put(chr(9)||chr(9)||chr(9)||chr(9));
when '星期六' then dbms_output.put(chr(9)||chr(9)||chr(9)||chr(9)||chr(9));
when '星期日' then dbms_output.put(chr(9)||chr(9)||chr(9)||chr(9)||chr(9)||chr(9));
end case;
for i in 1..day_num loop
dbms_output.put(i);
dbms_output.put(chr(9));
if to_char(to_date(month,'mm')+i-1,'day')='星期日'then
dbms_output.put_line(chr(10));
end if;
end loop;
end;我想输出日历,但是输入月份的时候,最后一周总是不显示。找了半天,没发现原因。那位仁兄帮忙看下。谢了!!

解决方案 »

  1.   

    SQL> exec disp_cal_month(1)
                                    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      31PL/SQL 过程已成功完成。SQL> exec disp_cal_month(2)
    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      28PL/SQL 过程已成功完成。SQL> exec disp_cal_month(3)
    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      28PL/SQL 过程已成功完成。SQL>没有发现最后一周不显示啊。
      

  2.   

    SQL> exec disp_cal_month(3)
    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没有显示.....
      

  3.   

    create or replace procedure disp_cal_month(month number)
    is
    week varchar2(8);
    day_num number;
    begin
    day_num := to_number(last_day(to_date(month,'mm'))-to_date(month,'mm')+1);
    week :=to_char(to_date(month,'mm'),'day');
    case week
    when '星期一' then null;
    when '星期二' then dbms_output.put(chr(9));
    when '星期三' then dbms_output.put(chr(9)||chr(9));
    when '星期四' then dbms_output.put(chr(9)||chr(9)||chr(9));
    when '星期五' then dbms_output.put(chr(9)||chr(9)||chr(9)||chr(9));
    when '星期六' then dbms_output.put(chr(9)||chr(9)||chr(9)||chr(9)||chr(9));
    when '星期日' then dbms_output.put(chr(9)||chr(9)||chr(9)||chr(9)||chr(9)||chr(9));
    end case;
    for i in 1..day_num loop
    dbms_output.put(i);
    dbms_output.put(chr(9));
    if to_char(to_date(month,'mm')+i-1,'day')='星期日'then
    dbms_output.put_line(chr(10));
    end if;
    end loop;
    dbms_output.put_line(chr(10));--增加此行可以解决显示所有
    end;