reference DBMS_RANDOMhttp://www.oracle.com.cn/onlinedoc/appdev.920/a96612/d_rando2.htm#998106

解决方案 »

  1.   

    [Q]随机抽取前N条记录的问题
    [A]8i以上版本
    select * from (select * from tablename order by sys_guid()) where rownum < N;
    select * from (select * from tablename order by dbms_random.value) where rownum< N;
    注:dbms_random包需要手工安装,位于$ORACLE_HOME/rdbms/admin/dbmsrand.sql
    dbms_random.value(100,200)可以产生100到200范围的随机数如果你只取一条,可以使用:
    select * from (select * from tablename order by sys_guid()) where rownum < 2;
    select * from (select * from tablename order by dbms_random.value) where rownum< 2;
      

  2.   

    lynx(lynx) 的方法固然巧妙,但我认为这个方法在大数据量的时候会很慢.
    我觉得应当这样做:
    现查出表的总记录n,
    在1-n之间随机选择一个数字m.
    利用分页原理,直接查询出第m条记录.
      

  3.   

    分页可以用类似下面的sql语句,正常的分页是要排序的,但对于这个问题,排序可以省略
    select *
      from (select ROWNUM MYROWNUM, T.*
              from RECORD_FAULT_INFO T
             where ROWNUM < m+1)
     where MYROWNUM > m-1