Ihre Arbeit mit Datumsangaben ist völlig falsch. Es ist schwierig, einen genauen Ort zu nennen, da es einige potenzielle Orte gibt. Ich werde erklären, was an diesem Codestück falsch ist (es stammt aus Ihrer "Zeile 89"-Anweisung):
... FP_BASIC_BD."DATE">=TO_CHAR(TRUNC(TO_DATE(GTT_DWM_STATS.CLOSINGDATE,'DD-MON-YY'), 'IW'),'DD-MON-YY') ...
GTT_DWM_STATS.CLOSINGDATE
Datumsformat hat (entsprechend Ihrer DDL-Anweisung). Aber to_date
Funktion nimmt einen String als ersten Parameter. An dieser Stelle geht Oracle wie folgt vor:
- wandelt das Datum implizit in eine Zeichenfolge um (unter Verwendung des Sitzungsformats)
- dann
to_date
Funktion versucht, es wieder in ein Datum umzuwandeln, wobei die Zeichenfolge als ein Datum behandelt wird, das in'DD-MON-YY'
geschrieben ist formatieren - dann
trunc
schneidet das Datum ab - dann
to_char
wandelt es wieder in einen String um, und dann vergleichst du deinen String mit dem Datum (schätze ich)FP_BASIC_BD."DATE"
- wenn
FP_BASIC_BD."DATE"
ein Datum ist, wandelt Oracle implizit das Ergebnis des Ausdrucks rechts vom Gleichheitszeichen wieder in ein Datum
um - oder wenn
FP_BASIC_BD."DATE"
ein String ist, vergleicht Oracle Strings nach den Regeln eines String-Vergleichs.
Was Sie hier brauchen, ist, alle unnötigen Transformationen loszuwerden:
FP_BASIC_BD."DATE" >= TRUNC(GTT_DWM_STATS.CLOSINGDATE, 'IW')
Und danach müssen Sie alle anderen Anweisungen, in denen Sie mit Datumsangaben arbeiten, sorgfältig prüfen. Wenn eine Funktion ein Datum als Eingabeparameter verwendet, müssen Sie ein Datum übergeben, wenn eine Funktion einen String akzeptiert - übergeben Sie einen String. Dasselbe gilt für Vergleiche:Vergleichen Sie einen String mit einem String und ein Datum mit einem Datum.