oracle随机数(结果集)的实例分享

发布时间:2020-06-21编辑:脚本学堂
本文分享下,在oracle数据库中获取随机数结果集的方法,分享一些具体的例子,有需要的朋友可以参考下。

本文内容:
oracle随机数(结果集)

1,dbms_random.random[常用方法(随机获取一条数据)]
 

复制代码 代码示例:
select * from (select t.* from T t order by dbms_random.random) where rownum<2;  

2,内部函数sys_guid() 
 

复制代码 代码示例:
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获得随机结果集
 

复制代码 代码示例:
select  *  from T sample(10) seed(10) where rownum<6;    
select * from T sample block(10) where rownum<6;   

参考资料
dbms_random包

获得随机小数:
 

复制代码 代码示例:
select dbms_random.value from dual;
0.438497011075884

限制小数的取值范围可以将dbms_random.value换为dbms_random.value(30,50)
其中的30和50就是它的取值范围.

约束下小数位数:
 

复制代码 代码示例:
select round(dbms_random.value,3) from dual;
0.819   保留小数位数为3位的随机数

获得随机整数:
 

复制代码 代码示例:
select floor(dbms_random.value(30,50)) from dual;

取得到30到50之间的随机整数。
dbms_random.random这样也可以获得整数。
不过值过大。

注意: 在使用sys_guid() 这种方法时,有时会获取到相同的记录,即和前一次查询的结果集是一样的,查找相关资料,有些说是和操作系统有关,在windows平台下正常,获取到的数据是随机的,而在linux等平台下始终是相同不变的数据集,有些说是因为sys_guid()函数本身的问题,即sys_guid()会在查询上生成一个16字节的全局唯一标识符,这个标识符在绝大部分平台上由一个宿主标识符和进程或进程的线程标识符组成,即它很可能是随机的,但是并不表示一定是百分之百的这样。 

因此,为确保在不同的平台每次读取的数据都是随机的,我们大多采用使用sample函数或者DBMS_RANDOM包获得随机结果集,其中使用sample函数更常用,因为其查询时缩小了查询范围,在查询大表,且要提取数据不是很不多的情况下,会对查询速度上有明显的提高。