15. Oktober 2008

Views, die auf Jahr, Monat und Tag basieren

Bei der Applikations-Entwicklung braucht man häufig Wertelisten, die einem Jahre, Monate oder Tage zurückgeben.

Man könnte dort natürlich jedes Mal ein Select-Statement fest in einer LOV verdrahten und diese Daten dann anzeigen.

Eleganter geht's aber mit einer View, die man zur Datenselektion benutzt. Hier sind 3 Beispiele für solche Views :

CREATE OR REPLACE FORCE VIEW JAHRE_V
(DATUM) AS
SELECT add_months (trunc (sysdate, 'YYYY'), 12 * (50 - Level))
FROM Dual
CONNECT BY Level <= 100;

CREATE OR REPLACE FORCE VIEW MONATE_V
(DATUM) AS
SELECT add_months (trunc (sysdate, 'MM'), 500 - Level)
FROM Dual
CONNECT BY Level <= 1000;

CREATE OR REPLACE FORCE VIEW TAGE_V
(DATUM) AS
SELECT trunc (sysdate) + 15000 - Level
FROM Dual
CONNECT BY Level <= 30000;


Diese Views ermöglichen nun den einfachen Select auf

- Aktuelles Jahr +/- 50 Jahre
- Aktueller Monat +/- 500 Monate
- Aktueller Tag +/- 15000 Tage

In einer Record-Group verwendet man diese Views dann so:

Werteliste der nächsten 10 Jahre

SELECT Datum
FROM Jahre_V
WHERE Datum BETWEEN trunc (sysdate, 'YYYY')
AND add_months (trunc (sysdate, 'YYYY'), 10*12);


Werteliste der letzten 30 Tage und der nächsten 10 Tage

SELECT Datum
FROM Tage_V
WHERE Datum BETWEEN trunc (sysdate-30) AND trunc (sysdate+10);


Einfacher geht es kaum noch
Gerd

Keine Kommentare: