Работата ти с датите е тотално неправилна. Трудно е да се посочи точното място, защото има някои потенциални места. Ще обясня какво не е наред с тази част от кода (взет е от вашия оператор "ред 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 има формат на датата (според вашия DDL отчет). Но to_date функцията приема низ като първи параметър. На това място Oracle прави следното:
- неявно преобразува датата в низ (използвайки формата на сесията)
- след това
to_dateфункцията се опитва да го преобразува обратно в дата, като третира низа като дата, написана в'DD-MON-YY'формат - след това
truncсъкращава датата - след това
to_charго преобразува отново в низ и след това сравнявате своя низ с датата (предполагам)FP_BASIC_BD."DATE" - ако
FP_BASIC_BD."DATE"е дата, Oracle преобразува неявно резултата от израз отдясно на знака за равенство отново в дата - или ако
FP_BASIC_BD."DATE"е низ, Oracle сравнява низовете според правилата за сравнение на низове.
Това, от което се нуждаете тук, е да се отървете от всички ненужни трансформации:
FP_BASIC_BD."DATE" >= TRUNC(GTT_DWM_STATS.CLOSINGDATE, 'IW')
И след това трябва да проверите внимателно всички други отчети, където работите с дати. Ако функция приема дата като входен параметър, трябва да подадете дата, ако функция приеме низ - подайте низ. Същото и със сравненията:сравнете низ с низ и дата с дата.