Oracle SQL Kalenderanzeige

Sie möchten einen Kalender für das aktuelle Jahr ausgeben lassen? Mit SQL*Plus ist das beispielsweise wie folgt möglich:

Kalenderanzeige in Oracle SQL*Plus
BREAK ON MONTH SKIP 1
COLUMN MONTH 20
SET LINESIZE 120
 
SELECT LPAD( Month, 20-(20-LENGTH(month))/2 ) month,
"SON", "MON", "DIN", "MIT", "DON", "FRE", "SAM"
FROM (
SELECT
TO_CHAR(dt,'fmMonthfm YYYY') month,
TO_CHAR(dt+1,'iw') week,
MAX(DECODE(TO_CHAR(dt,'d'),'1',LPAD(TO_CHAR(dt,'fmdd'),2)))
"SON",
MAX(DECODE(TO_CHAR(dt,'d'),'2',LPAD(TO_CHAR(dt,'fmdd'),2)))
"MON",
MAX(DECODE(TO_CHAR(dt,'d'),'3',LPAD(TO_CHAR(dt,'fmdd'),2)))
"DIN",
MAX(DECODE(TO_CHAR(dt,'d'),'4',LPAD(TO_CHAR(dt,'fmdd'),2)))
"MIT",
MAX(DECODE(TO_CHAR(dt,'d'),'5',LPAD(TO_CHAR(dt,'fmdd'),2)))
"DON",
MAX(DECODE(TO_CHAR(dt,'d'),'6',LPAD(TO_CHAR(dt,'fmdd'),2)))
"FRE",
MAX(DECODE(TO_CHAR(dt,'d'),'7',LPAD(TO_CHAR(dt,'fmdd'),2)))
"SAM"
FROM ( SELECT TRUNC(SYSDATE,'y')-1+ROWNUM dt
FROM all_objects
WHERE ROWNUM <= ADD_MONTHS(TRUNC(SYSDATE,'y'),12) -
TRUNC(SYSDATE,'y')
)
GROUP BY TO_CHAR(dt,'fmMonthfm YYYY'), TO_CHAR( dt+1, 'iw' )
)
ORDER BY TO_DATE( month, 'Month YYYY' ), TO_NUMBER(week);

Die Ausgabe sind dann beispielsweise so aus:

SO MO DI MI DO FR SA
-- -- -- -- -- -- --
    Januar 2009
          1  2  3
 5  6  7  8  9 10  4
12 13 14 15 16 17 11
19 20 21 22 23 24 18
26 27 28 29 30 31 25

    Februar 2009
 2  3  4  5  6  7  1
 9 10 11 12 13 14  8
16 17 18 19 20 21 15
23 24 25 26 27 28 22

...