浪子兄:这样用ROWNUM不能直接 = xxx吧,这样应该可以吧 select * from (select rownum rnum,t.* from table1 t) where rnum=(select trunc(dbms_random.value(1,1000)) from dual)
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;
从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
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速度快一点
1。基于新设计的方案:新增一个字段,属性为number,唯一,并做triger使之从一开始自动增长,具体实现时用随机数产生数指定范围限制条件就可以选择随机记录了。这种方案我们在题库中用过,
2。基于已有设计的方案:找到某一属性为唯一的字段,分析其特征值,使之可以与随机函数配套使用,就算选出多个,也可以由数据集中用定位法解决
3。选出后在数据集中用定位法解决,ado就可以支持绝对数据集位置
4。可能会有一条比较巧妙的查询语句可以直接实现你的要求,等我想好了告诉你
5.相关知识点。rowid是唯一的,但值范围比较难确定
不过,最好将你的表结构、属性贴出来,我就可以有换放失,直接告诉你方案了。
select * from (select rownum rnum,t.* from table1 t)
where rnum=(select trunc(dbms_random.value(1,1000)) from dual)
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
使用dbms_random.value速度快一点