select * from table1 
 where rownum=(select trunc(dbms_random.value(1,1000)) from dual)
1,10000之间随机选一条记录当然你需要先执行dbmsrand.sql这个包

解决方案 »

  1.   

    据本人知识点所能到达的范围,好象没有直接的命令,不过有两种方法可以实现这种功能:
    1。基于新设计的方案:新增一个字段,属性为number,唯一,并做triger使之从一开始自动增长,具体实现时用随机数产生数指定范围限制条件就可以选择随机记录了。这种方案我们在题库中用过,
    2。基于已有设计的方案:找到某一属性为唯一的字段,分析其特征值,使之可以与随机函数配套使用,就算选出多个,也可以由数据集中用定位法解决
    3。选出后在数据集中用定位法解决,ado就可以支持绝对数据集位置
    4。可能会有一条比较巧妙的查询语句可以直接实现你的要求,等我想好了告诉你
    5.相关知识点。rowid是唯一的,但值范围比较难确定
    不过,最好将你的表结构、属性贴出来,我就可以有换放失,直接告诉你方案了。
      

  2.   

    浪子兄:这样用ROWNUM不能直接 = xxx吧,这样应该可以吧
    select * from (select rownum rnum,t.* from table1 t)
     where rnum=(select trunc(dbms_random.value(1,1000)) from dual)
      

  3.   

    select * from (select * from your_table order by sys_guid()) where rownum < 2;(8i支持) select * from (select * from your_table order by dbms_random.value)where rownum < 2;
      

  4.   

    从zyz2表中随机取出两条纪录:
    SQL> select * from zyz2;
           ID         P1         P2
    ---------- ---------- ----------
            1        211        212
            2         12         14
            4        241        242
            2        145
            1         11
            3         17          26 rows selected.Elapsed: 00:00:00.50
    SQL> select id,p1,p2 from (select zyz2.*,dbms_random.random num from zyz2 order
    by num) where rownum<3;       ID         P1         P2
    ---------- ---------- ----------
            2         12         14
            1        211        212Elapsed: 00:00:00.30
    SQL> select id,p1,p2 from (select zyz2.*,dbms_random.random num from zyz2 order
    by num) where rownum<3;       ID         P1         P2
    ---------- ---------- ----------
            3         17          2
            2         12         14
      

  5.   

    select * from (select * from your_table order by sys_guid()) where rownum < 2;(8i支持) select * from (select * from your_table order by dbms_random.value)where rownum < 2;
    使用dbms_random.value速度快一点