今天我们来解决一个问题,那就是如何从表中随机取出指定行数的结果集,且每次执行获得的结果集数据不能一样。
具体讲解
这里还是涉及到了一个函数,那就是dbms_random。
dbms_random函数
dbms_random是oracle中提供的一个PL/SQL包,是用于生成随机数据的函数。
先进行随机排序
通过dbms_random来进行随机排序,让我们来看一下示例:
select * from user_table order by dbms_random.value();
通过此SQL可以针对user_table表中的数据进行随机排序。
接着我们通过rownum来取出随机的几行数据
直接上示例吧。
select * from (select * from user_table order by dbms_random.value()) where rownum <= 5
根据此SQL,我们就可以随机取出五条数据了,而且能保证每一次的数据各不相同。
分享一个错误方案
还需要分享一个错误的方案,来看下面的示例:
select * from user_table where rownum <= 5 order by dbms_random.value()
对比之下,其实这个SQL没有太大的变动,只不过将rownum <=5 放到了一行内了。
这会造成什么样的结果呢?
答案是这样的SQL无法真正做到随机取出数据,只能拿出固定的一些数据,只不过是做到了随机排序而已。
原因是在oracle中,rownum的执行顺序在order by前面,所以整个SQL的执行就会先取出五条数据,随后进行随机排序。
无论执行多少次,都只会随机出现同样五条数据。
记住整个错误方案,在使用时要考虑在内。
总结
今天学习的这个问题,很现实,同样也很常见,要考虑更多的情况才能实现出来。
最近开始来学习Oracle数据库的一些知识,其中包含一些函数的使用,或者是特性的介绍讲解等,将会在系列文章内说到。
喜欢的可以关注一下专栏。