我在两个Oracle 11 DB-Host上遇到了一个相当奇怪的情况,我无法在其他任何地方重现:
给出一个相当简单的表:
CREATE TABLE TESTTABLE ( XID NUMBER(10) NOT NULL,
XSTRING CHAR(14 BYTE) NOT NULL,
XDATE DATE NOT NULL )
LOGGING NOCOMPRESS NOCACHE NOPARALLEL MONITORING;
充满了相当简单的数据:
INSERT INTO TESTTABLE(XID, XSTRING, XDATE)
VALUES(1119870, 'R008505 ', TO_DATE('08/01/2007 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
然后这个查询:
SELECT *
FROM TESTTABLE
WHERE xstring='R008505'
AND (xdate >= SYSDATE OR xdate < '01.01.1900');
返回表中唯一的行(当然是错误的),而以下查询(交换了SYSDATE行)返回0行:
SELECT *
FROM TESTTABLE
WHERE xstring='R008505'
AND (xdate < '01.01.1900' OR xdate >= SYSDATE);
使用TRUNC(SYSDATE)
在这里没有任何区别。
如何发生这种情况以及如何解决此问题?
答案 0 :(得分:2)
这与a previous question非常相似,可能与错误9495697有关,但在这种情况下未得到确认。我无法分享MOS中的错误详细信息,但someone else has already done so。
在这种情况下,您在基础11.2.0.1版本上遇到的症状在11.2.0.3 or on SQL Fiddle, which is running 11.2.0.2上没有显示出来。
如果是那个bug,那么应用11.2.0.2补丁集应该可以治愈它,或者补丁可用于此问题;在应用补丁之前,不确定是否需要提出服务请求并确认症状是否与特定错误相匹配。