2
我遇到了一個很奇怪的情況在兩個甲骨文11 DB-主機,我不能重現其他地方:如何在WHERE子句中放置SYSDATE影響結果集?
給出一個相當簡單的表:
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)
不作任何這裏的區別。
這是怎麼發生的以及如何解決這個問題?
你有什麼補丁程序?我沒有在11.2.0.3上看到這個,或[在SQL Fiddle上是11.2.0.2](http://sqlfiddle.com/#!4/5d646/1);兩個查詢都找到零行。執行計劃爲兩個查詢顯示了什麼? –
@AlexPoole Ora-Version是11.2.0.1.0,執行計劃(全表掃描)是相同的。 – marderh
我對計劃中顯示的過濾謂詞更感興趣。這似乎是一個錯誤。看起來可能是bug 9495697.修補數據庫應該有所幫助,如果可行的話。但是您需要向Oracle提出服務請求才能確認它是同一個問題。 –