dbms_random.value
作用:随机生成数,默认0~1
案例1,默认情况:
select dbms_random.value as 默认 from dual;
查询结果:
案例2,给出范围情况:
select dbms_random.value(1,10) as 范围 from dual;
查询结果:
此为测试的表数据:
案例3:从上图随机查询3条数据
错误示范:
select rownum 序号 ,dbms_random.value,t.*
from stu1 t where rownum<=3 order by dbms_random.value;
输出结果1:
输出结果2:
由上图结果可以看到,输出的结果是一样的,没有做到5条随机取3条。
错误的原因是:先取出3条数据,再在这三条数据中随机排序,依然是这三条数据。
正确示范:
select t.*,rownum 排序后
from (
select a.*,dbms_random.value 随机数,rownum 排序前 from stu1 a order by dbms_random.value
) t where rownum<=3;
输出结果1:
输出结果2:
由上图可知,做到了随机从5条数据取出3条。由此可见,正确的做法是 先排序,再取数。按照dbms_random.value 排序后的数据是随机的,再从随机的数据中取出3条,就是需要的结果了。