Il tuo lavoro con le date è totalmente errato. È difficile indicare il luogo esatto perché ci sono alcuni posti potenziali. Spiegherò cosa c'è che non va in questo pezzo di codice (è preso dalla tua istruzione "linea 89"):
... FP_BASIC_BD."DATE">=TO_CHAR(TRUNC(TO_DATE(GTT_DWM_STATS.CLOSINGDATE,'DD-MON-YY'), 'IW'),'DD-MON-YY') ...
GTT_DWM_STATS.CLOSINGDATE
ha il formato della data (secondo la tua dichiarazione DDL). Ma to_date
La funzione accetta una stringa come primo parametro. In questo luogo, Oracle esegue le seguenti operazioni:
- converte implicitamente la data in una stringa (usando il formato della sessione)
- poi
to_date
la funzione tenta di riconvertirla in una data, trattando la stringa come una data scritta in'DD-MON-YY'
formato - quindi
trunc
tronca la data - quindi
to_char
lo converte di nuovo in una stringa e poi confronti la tua stringa con la data (credo)FP_BASIC_BD."DATE"
- se
FP_BASIC_BD."DATE"
è una data, Oracle converte implicitamente il risultato dell'espressione a destra del segno di uguale nuovamente in una data - o se
FP_BASIC_BD."DATE"
è una stringa, Oracle confronta le stringhe secondo le regole di un confronto di stringhe.
Quello di cui hai bisogno qui è sbarazzarti di tutte le trasformazioni non necessarie:
FP_BASIC_BD."DATE" >= TRUNC(GTT_DWM_STATS.CLOSINGDATE, 'IW')
E dopo devi controllare attentamente tutte le altre dichiarazioni in cui stai lavorando con le date. Se una funzione accetta una data come parametro di input, devi passare una data, se una funzione accetta una stringa - passa una stringa. Lo stesso con i confronti:confronta una stringa con una stringa e una data con una data.