Работата ти с датите е тотално неправилна. Трудно е да се посочи точното място, защото има някои потенциални места. Ще обясня какво не е наред с тази част от кода (взет е от вашия оператор "ред 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')
И след това трябва да проверите внимателно всички други отчети, където работите с дати. Ако функция приема дата като входен параметър, трябва да подадете дата, ако функция приеме низ - подайте низ. Същото и със сравненията:сравнете низ с низ и дата с дата.