Dit arbejde med datoer er fuldstændig forkert. Det er svært at udpege et præcist sted, fordi der er nogle potentielle steder. Jeg vil forklare, hvad der er galt med dette stykke kode (det er taget fra din "linje 89"-sætning):
... FP_BASIC_BD."DATE">=TO_CHAR(TRUNC(TO_DATE(GTT_DWM_STATS.CLOSINGDATE,'DD-MON-YY'), 'IW'),'DD-MON-YY') ...
GTT_DWM_STATS.CLOSINGDATE har datoformat (ifølge din DDL-erklæring). Men to_date funktion tager en streng som en første parameter. På dette sted gør Oracle følgende:
- konverterer implicit dato til streng (ved hjælp af sessionens format)
- derefter
to_datefunktion forsøger at konvertere den tilbage til en dato, idet den behandler strengen som en dato skrevet i'DD-MON-YY'format - derefter
truncafkorter datoen - derefter
to_charkonverterer den igen til en streng, og derefter sammenligner du din streng med datoen (jeg gætter på)FP_BASIC_BD."DATE" - hvis
FP_BASIC_BD."DATE"er en dato, konverterer Oracle implicit resultatet af udtryk til højre for lighedstegn igen til en dato - eller hvis
FP_BASIC_BD."DATE"er en streng, sammenligner Oracle strenge i henhold til reglerne for en strengsammenligning.
Hvad du har brug for her er at slippe af med alle unødvendige transformationer:
FP_BASIC_BD."DATE" >= TRUNC(GTT_DWM_STATS.CLOSINGDATE, 'IW')
Og herefter skal du nøje tjekke alle andre udsagn, hvor du arbejder med datoer. Hvis en funktion tager en dato som inputparameter, skal du sende en dato, hvis en funktion tager en streng - videregive en streng. Det samme med sammenligninger:Sammenlign en streng med en streng og en dato med en dato.