2014-05-14 87 views
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)不作任何這裏的區別。

這是怎麼發生的以及如何解決這個問題?

+0

你有什麼補丁程序?我沒有在11.2.0.3上看到這個,或[在SQL Fiddle上是11.2.0.2](http://sqlfiddle.com/#!4/5d646/1);兩個查詢都找到零行。執行計劃爲兩個查詢顯示了什麼? –

+0

@AlexPoole Ora-Version是11.2.0.1.0,執行計劃(全表掃描)是相同的。 – marderh

+1

我對計劃中顯示的過濾謂詞更感興趣。這似乎是一個錯誤。看起來可能是bug 9495697.修補數據庫應該有所幫助,如果可行的話。但是您需要向Oracle提出服務請求才能確認它是同一個問題。 –

回答

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上沒有顯示。

如果是這個錯誤,那麼應用11.2.0.2補丁集可以治癒它,或者有一個補丁可以解決這個問題;不知道是否需要提出服務請求,並確認在應用修補程序之前症狀與特定錯誤匹配。