Oracle 11g Top N Query为在10g下运行的同一查询返回不同的值

时间:2011-10-26 16:31:28

标签: oracle oracle10g oracle11gr2

我已经创建了一个简单的例子来解决这个问题。 以下查询为order by子句中不存在的所有列返回null。如果我对10g运行查询,那就没问题了。这是前n个查询的基本实现。

我知道内部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

1 个答案:

答案 0 :(得分:2)

我为WINDOWS(64位AMD64和INTEL EM64(补丁))应用了ORACLE 11G 11.2.0.1 PATCH 13 BUG,这解决了这个问题。我还试图查看bug数据库以找出具体原因,但这说起来容易做起来难!

感谢您的建议