2010-10-26 83 views
2

我有我的Oracle 10g數據庫非常奇怪的結果,因爲這一天我轉我的裝載機直接= false來直接=真與壓縮表..甲骨文直接負荷似乎讓奇怪的結果

例如,當我作出這樣的查詢裝載機後:

SELECT * FROM MYTABLE其中一個月爲空

我沒有得到任何答案..

但是當我查詢特定行 SELECT * FROM mytable的地方ID = 123 顯示的行有一個「月」列(vharchar2(10)),它是空的! 我從來沒有看見..

而且只在我200000+線表中的幾行發生..

你看看會發生什麼?

我已經切換回直接=假,它運行確定..沒有更奇怪的行爲.. 我能做些什麼?測試?

謝謝

+0

你有一個月的索引?你嘗試重建它們嗎?什麼是查詢解釋計劃? – Benoit 2010-10-26 11:59:51

+0

在此表中沒有索引..和抱歉,我不得不重新加載它沒有直接=真實的,它的工作,但我沒有詢問從之前 – Fredv 2010-10-26 14:15:38

+0

是直接= true您做出的唯一改變解釋一下嗎?根據基礎數據中的內容,可能一次修剪月份列,另一次修剪剩餘空間。 – 2010-10-26 16:14:06

回答

2

表上的任何約束,特別是該列上的NOT NULL約束。約束的狀態(延遲,禁用,無效)可能會造成怪異現象。

如果限制設置爲NOVALIDATE但他相信,那麼優化可能會看到「啊哈,該列不能爲空,所以我不會甚至懶得看」。

3

也許你的列不是空的,但包含不可打印的字符。你可以做一個轉儲在列,即:

SQL> select rownum, dump(a) from test; 

    ROWNUM DUMP(A) 
---------- --------------------------------- 
     1 NULL 
     2 Typ=1 Len=1: 0 

這裏的第一行有一個NULL值而第二行有一個非空字符(CHR(0))。

你可以在你的數據庫運行下面的查詢,看看你的列真的是NULL:

select dump(month) from mytable where id = 123 
1

如果您在工具(如蟾蜍或SQL開發者)查看結果,有可能該行有空格/控制中斷,但沒有正確顯示。嘗試運行以下查詢並顯示結果。

select month, nvl(month,'Month is NUll'), length(month) 
    from mytable 
    where id = 123