select aCode,
       aName,
       aDispOrder
FROM AAA
ORDER BY aDispOrder
现在表数据里,aDispOrder=‘9999’的记录很多,我想问的就是aDispOrder=‘9999’的这些记录检索出来按什么排序的?
按数据插入的先后顺序还是按rowid?

解决方案 »

  1.   

    从实验来看,是按rowid排序,不过我确定,因为还没看到相关文档
      

  2.   

    ROWID已被事实否定~~~~~~
    楼上的回答错误~··
      

  3.   

    不好意思,写错了,是我不确定,因为没看过这方面的相关文档。但我试过各种情况,order by column1和order by rowid得到的结果集的顺序相同。当然只要出现不同的情况就可以否定按rowid排序,但起码我还没遇到。
      

  4.   

    ROWID本来就无序,只是个ORACLE内部的序列标志而已,,没有人用它来排序的,按照ORACLE规则进行应用...
      

  5.   


    是按rowid 的 ,因为你已经加了个ORDER BY aDispOrder 
      

  6.   

    TO #6楼,你的逻辑没理解~~~
    TO #1楼,#2楼
              我这边的现象是【不是按rowid】来排序的,正如2楼说的,ROWID本来就无序的
    所以最终,我个人觉得应该是按数据插入顺序来的。如果大家有事实能够证明我的想法是错的,欢迎指出。
      

  7.   

    ORACLE 在查询数据的时候,是直接从硬盘的磁片中提取数据块,也就是常说的BLOCK,
    这些数据读取出来的时候,ORACLE将他们的排序方式,是根据BLOCK中的内存地址进行排序。我下面做一个例子--查询内存地址
    SELECT ROWID,e.* FROM emp eAAAL+ZAAEAAAAAdAAA 7369 SMITH CLERK         800.00
    AAAL+ZAAEAAAAAdAAB 7499 ALLEN SALESMAN 1600.00 300.00
    AAAL+ZAAEAAAAAdAAC 7521 WARD SALESMAN 1250.00 500.00
    AAAL+ZAAEAAAAAdAAD 7566 JONES MANAGER         2975.00
    AAAL+ZAAEAAAAAdAAE 7654 MARTIN SALESMAN 1250.00 1400.00
    AAAL+ZAAEAAAAAdAAF 7698 BLAKE MANAGER         2850.00
    AAAL+ZAAEAAAAAdAAG 7782 CLARK MANAGER         2450.00
    AAAL+ZAAEAAAAAdAAH 7788 SCOTT ANALYST         3000.00
    AAAL+ZAAEAAAAAdAAI 7839 KING PRESIDENT 5000.00
    AAAL+ZAAEAAAAAdAAJ 7844 TURNER SALESMAN 1500.00 0.00
    AAAL+ZAAEAAAAAdAAK 7876 ADAMS CLERK         1100.00
    AAAL+ZAAEAAAAAdAAL 7900 JAMES CLERK         950.00
    AAAL+ZAAEAAAAAdAAM 7902 FORD ANALYST         3000.00
    AAAL+ZAAEAAAAAdAAN 7934 MILLER CLERK         1300.00 --不查询内存地址
    SELECT e.empno,e.ename,e.job,e.sal,e.comm FROM emp e7369 SMITH CLERK 800.00
    7499 ALLEN SALESMAN 1600.00 300.00
    7521 WARD SALESMAN 1250.00 500.00
    7566 JONES MANAGER 2975.00
    7654 MARTIN SALESMAN 1250.00 1400.00
    7698 BLAKE MANAGER 2850.00
    7782 CLARK MANAGER 2450.00
    7788 SCOTT ANALYST 3000.00
    7839 KING PRESIDENT 5000.00
    7844 TURNER SALESMAN 1500.00 0.00
    7876 ADAMS CLERK 1100.00
    7900 JAMES CLERK 950.00
    7902 FORD ANALYST 3000.00
    7934 MILLER CLERK 1300.00
      

  8.   


    create table test (id number, fdate date);insert into test values (1, sysdate);
    commit;select id, to_char(fdate, 'yyyymmdd hh24:mi:ss') fdate,rowid from test order by id;        ID FDATE                     ROWID             
    ---------- ------------------------- ------------------
             1 20100621 11:57:55         AAAWFZAAEAAAzh8AAA
             1 20100621 11:57:57         AAAWFZAAEAAAzh8AAB
             1 20100621 11:58:00         AAAWFZAAEAAAzh8AAC
             1 20100621 11:58:03         AAAWFZAAEAAAzh8AAD
             1 20100621 11:58:06         AAAWFZAAEAAAzh8AAE
             1 20100621 11:58:08         AAAWFZAAEAAAzh8AAF
             1 20100621 12:00:10         AAAWFZAAEAAAzh8AAM
             1 20100621 11:58:13         AAAWFZAAEAAAzh8AAH
             1 20100621 11:58:15         AAAWFZAAEAAAzh8AAI
             1 20100621 12:00:02         AAAWFZAAEAAAzh8AAJ
             1 20100621 12:00:04         AAAWFZAAEAAAzh8AAK
             1 20100621 12:00:07         AAAWFZAAEAAAzh8AAL
             1 20100621 11:58:11         AAAWFZAAEAAAzh8AAG既不按插入时间,也不按rowid,真是乖了,期待高手解释一下。
      

  9.   

    有orale DBA吗?出来解释下~~~~~~
      

  10.   

    为什么有人寄希望于读出记录的顺序是按照rowid来排的呢?
    如果只有insert,这或许为真,可是如果后期有不断delete, update操作,很多块地址是可以复用的。
    那么读出的顺序与你的入库的顺序以及rowid的顺序就可能不一致了。顺序是依靠orderby来保证的。
      

  11.   

    永远不要期待ORACLE给你保证什么顺序如果没有“明确"的指定ORDER BY(楼主这种情况就不明确 因为有同一列相同数据的存在),那么数据的返回顺序就是随机的。而且这种随机并不是随便几次简单的测试就可以测出来的,不然就不叫”随机“了
      

  12.   


    -- 不同的SQL语句,检索方法会有很大的区别,
    -- select ,a,b,c ...字段排放的顺序不同,也会有很大的差异,关键看你的需求去orader by 才是王道!
    -- 不要只看rowid 怎么、怎么的....
      

  13.   

    我也知道orader by 才是王道
    小日本问我,我也搞不定~~~
    现在我就回答随机顺序了~~~~~~~~~~