1 select a.* , ROWNUM rownum_  from v_test a
2 select a.* from v_test av_test 是个视图包括多个排序,多个查询条件 及嵌套视图
令人不解上面两个查询 查出的结果数 1 > 2 v_test 形如:
WHERE ( ( 条件 and 条件  ) AND ( 条件1 and 条件 2 and 条件 3   ))
ORDER BY column1 ASC, column2 ASC, column3 ASC;红色部分压根没起作用 崩溃啊!!!!!
很急,谁能解决+200分explan 走的是 sort order by

解决方案 »

  1.   

         最好把v_test 给兄弟们贴出来,要不看不出问题啊 
      

  2.   

    看不到你说rownum奇怪在哪?你试做一下数据分析,原表里到底是什么数据?
    到底是哪些条件不起作用了?
      

  3.   

    WHERE ( ( 条件 and 条件  ) AND ( 条件1 and 条件 2 and 条件 3   )) 
    反正里面都是AND的关系,为什么要加那么多括号呢?
    直接
    WHERE   条件1 and 条件 2 and 条件 3  
      

  4.   

    简单说
    1 select a.* , ROWNUM rownum_  from v_test a
    2 select a.* from v_test a加了rownum_  的查询结果错了 多出了几条
    而这几条是红色条件限制的 总的说 rownum 影响了 查询结果 不是顺序不对
    是结果压根就不对
    令该sql 是动态生成的 所以不太规整
    如果不一样,那可能原始数据有变化 这种低级错误 不要考虑了
      

  5.   


    explan 看的到么? 跨站看不到?
    rownum 影响了 查询结果 不是顺序不对 
    是结果压根就不对 
      

  6.   


    v_test 视图比较复杂,还有机密之嫌
    因此没贴
      

  7.   

    不可能吧?没遇见这样的问题Microsoft Windows XP [版本 5.1.2600]
    (C) 版权所有 1985-2001 Microsoft Corp.C:\Documents and Settings\Administrator>SQPPLUS
    'SQPPLUS' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。C:\Documents and Settings\Administrator>SQLPLUSSQL*Plus: Release 10.2.0.1.0 - Production on 星期六 3月 28 16:10:24 2009Copyright (c) 1982, 2005, Oracle.  All rights reserved.请输入用户名:  SYSTEM
    输入口令:连接到:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining optionsSQL> CREATE OR REPLACE VIEW V_TEST AS SELECT * FROM TEST WHERE DW<>'A';视图已创建。SQL> SELECT * FROM V_TEST;DW         RQ
    ---------- --------------
    B          26-3月 -09
    B          23-3月 -09
    C          23-3月 -09
    C          27-3月 -09SQL> SELECT A.*,ROWNUM ROWNUM_ FROM V_TEST A;DW         RQ                ROWNUM_
    ---------- -------------- ----------
    B          26-3月 -09              1
    B          23-3月 -09              2
    C          23-3月 -09              3
    C          27-3月 -09              4SQL>也没有出现你说的错误呀?可能还是你哪个地方不小心搞错了,比如说你SQL语句生成的有问题,覆盖视图的时候没加REPLACE,你再做试验的时候,有人修改了数据而你不知道等等。
    要相信ORACLE,没那么多BUG的
      

  8.   

    yf520gn 
    我给你发消息了 你看到了么 
    bug 的可能很小 
    但确实有这个问题 
    我也在想办法模拟
    只是特殊的情况才会发生这中情况 
    上线说 好吧 
      

  9.   

    建议你不要求在视图里面用order by ,因为它不是最终的结果;
    如果有需要,那么你就用over()分析函数来实现替代
      

  10.   

    建议你不要求在视图里面用order by ,因为它不是最终的结果; 
    如果有需要,那么你就用over()分析函数来实现替代 
    --原sql 很复杂,放到视图中 测试方便些
    xlongbuilder      2009年03月28日 16点48分28秒 说:
    这个问题我觉得比较蹊跷,其实这是由分页引起的 分页采用标准的 三层嵌套,但查询结果出错造成严重问题 
    同时 只是在复杂查询才会发生这种情况 很是郁闷
      

  11.   

    oracledbalgtu写过一个分页函数,你可以借鉴一下:分页一般语法如下:
    CREATE OR REPLACE FUNCTION GG(S INT, E INT) RETURN SYS_REFCURSOR AS
      R_C SYS_REFCURSOR;
    BEGIN
      OPEN R_C FOR 'SELECT ename,empno
          FROM SCOTT.EMP
         WHERE ROWID IN (SELECT RID
                           FROM (SELECT ROWNUM RNO, ROWID RID
                                   FROM (SELECT ROWID
                                           FROM SCOTT.EMP
                                          ORDER BY ENAME)
                                  WHERE ROWNUM <= :E)
                          WHERE RNO >= :S)'
        USING E, S;
      RETURN R_C;
    END;
    /DECLARE
     r_c SYS_REFCURSOR;
     v_c1 VARCHAR2(10);
     v_c2 VARCHAR2(10);
    BEGIN
     r_c:=gg(2,6);
     LOOP
      FETCH r_c INTO v_c1,v_c2;
      EXIT WHEN r_c%NOTFOUND;
      dbms_output.put_Line(v_c1||'-'||v_c2);
     END LOOP;
     CLOSE r_c;
    END;
    /