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;