Ich habe eine Tabelle mit diversen Textspalten (Bereich, GG, GZ, Abt1, Abt2, Abt3) sowie einer Datumspalte „Projekt_Planende“.
Um nun das Geschäftsjahr herauszufinden (beginnt bei uns dummerweise am 01. Oktober!), habe ich mir einen View überlegt, der zusätzlich die Spalten GJAHR und GMONAT aus der Datumsspalte errechnet und mit ausgibt, und zwar mit folgender Überlegung:
Zum Datum addiere ich 92 Tage (31 für Oktober und Dezember, 30 für November) und erhalte somit eine Jahresangabe, die 1 größer als das aktuelle Geschäftsjahr ist; ziehe danach noch 1 ab und erhalte so das tatächliche Geschäftsjahr (z.B. 2003 für den Datumsbereich 01.10.2003 bis 30.09.2003).
Den Geschäftsmonat (der Geschäftsmonat 1 in einem Geschäftsjahr ist der Oktober) erhalte ich für Oktober bis Dezember mittels der Decode-Anweisung und für die übrigen Monate durch Addition von 3 - das funktioniert auch.
Soweit so gut. Der View lässt sich compilieren, und ich kann auch darauf selektieren. Sobald ich aber den Select mit einer Einschränkung auf das GJAHR ausführe, bekomme ich die Fehlermeldung: „ORA-01841: (full) year must be between -4713 and +9999, and not be 0“.
Folgender Select geht:
SELECT bereich, gg, gz, abt1, abt2, abt3, gmonat, gjahr, pplanende
FROM vforecast
WHERE pplanende > TO_DATE(‚01.10.2002‘,‚DD.MM.YYYY‘);
Folgender Select bringt den besagten Fehler:
SELECT bereich, gg, gz, abt1, abt2, abt3, gmonat, gjahr, pplanende
FROM vforecast
WHERE pplanende > TO_DATE(‚01.10.2002‘,‚DD.MM.YYYY‘);
Hier die View-Definition. Gibts hier irgendeinen groben Schnitzer, den ich übersehen habe?
CREATE OR REPLACE VIEW vforecast (
bereich,
gg,
gz,
abt1,
abt2,
abt3,
gjahr,
gmonat,
pplanende )
AS
SELECT
Bereich, GG, GZ, Abt1, Abt2, Abt3,
TO_NUMBER(TO_CHAR(Projekt_Planende + 92,‚YYYY‘)) - 1,
TO_NUMBER(DECODE(TO_CHAR(Projekt_Planende, ‚MM‘), ‚10‘, ‚1‘, ‚11‘, ‚2‘, ‚12‘, ‚3‘,
TO_CHAR(3 + TO_NUMBER(TO_CHAR(Projekt_Planende,‚MM‘))))),
Projekt_Planende
FROM
VProjekte_6s
WHERE
Projekt_Planende IS NOT NULL
AND Status != ‚EINGESTELLT‘
/
Ciao,
Ralf