1.
To_Date(To_Char(MaxDate, 'DD/MM/YYYY')) = REP_DATE
způsobuje problém. když použijete to_date bez formátu času, Oracle použije k převodu aktuální NLS formát relací, což ve vašem případě nemusí být "DD/MM/RRRR". Zkontrolujte toto...
SQL> select sysdate from dual;
SYSDATE
---------
26-SEP-12
Which means my session's setting is DD-Mon-YY
SQL> select to_char(sysdate,'MM/DD/YYYY') from dual;
TO_CHAR(SY
----------
09/26/2012
SQL> select to_date(to_char(sysdate,'MM/DD/YYYY')) from dual;
select to_date(to_char(sysdate,'MM/DD/YYYY')) from dual
*
ERROR at line 1:
ORA-01843: not a valid month
SQL> select to_date(to_char(sysdate,'MM/DD/YYYY'),'MM/DD/YYYY') from dual;
TO_DATE(T
---------
26-SEP-12
2.
Ještě důležitější je, proč převádíte na znak a poté na datum, místo přímého porovnávání
MaxDate = REP_DATE
Pokud chcete před porovnáním ignorovat časovou složku v MaxDate, měli byste použít..
trunc(MaxDate ) = rep_date
místo toho.
==Aktualizace:na základě aktualizované otázky.
Rep_Date = 01/04/2009 Rep_Time = 01/01/1753 13:00:00
Myslím, že problém je složitější. pokud je rep_time zamýšlen jako pouze čas, nemůžete jej uložit do databáze jako datum. Musel by to být řetězec nebo datum na časový interval nebo numericky jako sekundy (díky Alexovi viz toto ). Pokud je to možné, navrhoval bych použít jeden sloupec rep_date, který obsahuje datum i čas, a porovnat jej přímo se sloupcem maximálního data.
Pokud je to běžící systém a nemáte kontrolu nad aktualizací, můžete zkusit toto.
trunc(rep_date) = trunc(maxdate) and
to_char(rep_date,'HH24:MI:SS') = to_char(maxdate,'HH24:MI:SS')
V každém případě je čas ukládán nesprávně (jak můžete vidět z roku 1753) a v budoucnu mohou nastat další problémy.