oracle之随机数(结果集)
1 dbms_random.random[常用方法(随机获取一条数据)]
Java代码
select * from (select t.* from T t order by dbms_random.random) where rownum<2;
2 内部函数sys_guid()
Java代码
select * from (select t.* from T t order by sys_guid()) where rownum < (select count(1) from T);
select * from (select t.* from T t order by sys_guid()) where rownum <2;
3 使用sample获得随机结果集
Java代码
select * from T sample(10) seed(10) where rownum<6;
select * from T sample block(10) where rownum<6;
注: 在使用sys_guid() 这种方法时,有时会获取到相同的记录,即和前一次查询的结果集是一样的,查找相关资料,有些说是和操作系统有关,在windows平台下正常,获取到的数据是随机的,而在linux等平台下始终是相同不变的数据集,有些说是因为sys_guid()函数本身的问题,即sys_guid()会在查询上生成一个16字节的全局唯一标识符,这个标识符在绝大部分平台上由一个宿主标识符和进程或进程的线程标识符组成,这就是说,它很可能是随机的,但是并不表示一定是百分之百的这样。
所以,为确保在不同的平台每次读取的数据都是随机的,我们大多采用使用sample函数或者DBMS_RANDOM包获得随机结果集,其中使用sample函数更常用,因为其查询时缩小了查询范围,在查询大表,且要提取数据不是很不多的情况下,会对查询速度上有明显的提高。
作者“咫尺天涯”
相关新闻>>
- 发表评论
-
- 最新评论 更多>>