日期:2014-05-17  浏览次数:20727 次

那位仁兄帮忙看一下下面这个程序
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;

我想输出日历,但是输入月份的时候,最后一周总是不显示。找了半天,没发现原因。那位仁兄帮忙看下。谢了!!

------解决方案--------------------
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 31



PL/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 28



PL/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 28



PL/SQL 过程已成功完成。

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 28


29,30,31没有显示.....
------解决方案--------------------
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;