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_dateFunktion versucht, es wieder in ein Datum umzuwandeln, wobei die Zeichenfolge als ein Datum behandelt wird, das in'DD-MON-YY'geschrieben ist formatieren - dann
truncschneidet das Datum ab - dann
to_charwandelt 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.