2011-10-26 40 views
1

我已經創建了一個簡單的這個問題的例子。 以下查詢返回在order by子句中不存在的所有列的空值。如果我對10g運行查詢,那就沒問題。這是前n個查詢的基本實現。Oracle 11g Top N查詢返回不同的值到10g下運行的相同查詢

我知道內部的select語句是不夠的,但生成了SQL(如果需要,我可以更改引擎)。

所有幫助非常感謝!

select * from (
    select b.* from USER_table b 
    where b.id in (
     select c.id from USER_table c where c.removed = 0 
    ) 
    order by surname 
) a where rownum <= 10 



-------------------------------------------------------- 
-- DDL for Table USER_TABLE 
-------------------------------------------------------- 

    CREATE TABLE "CHRONICLE"."USER_TABLE" 
    ( "FIRST_NAME" VARCHAR2(20 BYTE), 
    "SURNAME" VARCHAR2(20 BYTE), 
    "USERNAME" VARCHAR2(20 BYTE), 
    "REMOVED" NUMBER, 
    "ID" NUMBER 
    ) SEGMENT CREATION IMMEDIATE 
    PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING 
    STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 
    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE  DEFAULT  CELL_FLASH_CACHE DEFAULT) 
    TABLESPACE "USERS" ; 
-------------------------------------------------------- 
-- DDL for Index USER_TABLE_PK 
-------------------------------------------------------- 

    CREATE UNIQUE INDEX "CHRONICLE"."USER_TABLE_PK" ON "CHRONICLE"."USER_TABLE" ("ID") 
    PCTFREE 10 INITRANS 2 MAXTRANS 255 
    STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 
    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT  CELL_FLASH_CACHE DEFAULT) 
    TABLESPACE "USERS" ; 
-------------------------------------------------------- 
-- Constraints for Table USER_TABLE 
-------------------------------------------------------- 

    ALTER TABLE "CHRONICLE"."USER_TABLE" MODIFY ("ID" NOT NULL ENABLE); 

    ALTER TABLE "CHRONICLE"."USER_TABLE" ADD CONSTRAINT "USER_TABLE_PK" PRIMARY KEY ("ID") 
    USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 
    STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 
    PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) 
    TABLESPACE "USERS" ENABLE; 

oracle版本是10.2.0.1。

它是在Windows 2008 R2 x64的運行

解釋計劃11g的

Explain Plan For 11g

解釋計劃的10G

Explain Plan For 10g

+0

您可以發佈您正在使用的11g數據庫的完整4位數版本和生成的查詢計劃嗎?如果11g在數據不爲NULL的情況下返回NULL,那就是一個錯誤。你(或你的DBA)是否將所有補丁應用於11g數據庫? –

+0

如果您將查詢的rownum部分帶走,我要問的第一個問題是數據的順序在10g和11g之間相同?另請注意,10g和11g2之間的優化引擎發生了重大更改。另一個「測試」選項是將基於成本的優化器更改爲10.2.0.1比較級並再次測試。 – tsells

+0

完整版本號是11.2.0.1。 Oracle的版本是否可以完全下載,或者我應該在其他地方尋找補丁。數據庫在Windows 2008 R2 x64上運行。 –

回答

2

我申請的Oracle 11g 11.2.0.1 PATCH 13 WINDOWS的BUG(64位AMD64和INTEL EM64(補丁)),這已經解決了這個問題。我也試圖查找錯誤數據庫以找到具體原因,但這說起來容易做起來難!

感謝您的建議