dbms_random.value()

本文深入探讨了Oracle数据库中随机数生成的相关技术,包括如何使用dbms_random包来生成0到1之间的随机数、指定范围内的随机数、符合正态分布的随机数、字符串形式的随机数以及特定条件下的随机数。详细介绍了每个函数的用法及参数解释,为数据库操作和应用程序开发提供了实用的随机数生成解决方案。
来源:http://hi.baidu.com/jw7479189/blog/item/398b9437f4459cda7d1e7191.html
RACLE中随机数的包的源文件目录是:{ORACLE_HOME}\RDBMS\ADMIN\dbmsrand.sql
1.--返回0,1间的随机数(包括0和1)
Java代码 复制代码 收藏代码

SQL> select dbms_random.value from dual;

VALUE
----------
.89972641


2.--返回10到20间的随机数(包括10和20)
Java代码 复制代码 收藏代码

SQL> select dbms_random.value(10,20) from dual;

DBMS_RANDOM.VALUE(10,20)
------------------------
19.3048583


3.
/*
NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。
这个函数返回的数值中有68%是介于-1与+1之间,
95%介于-2与+2之间,99%介于-3与+3之间。
*/
Java代码 复制代码 收藏代码

SQL> select dbms_random.normal from dual;

NORMAL
----------
1.08646246


--4.第一个参数 P 表示 printable,即字符串由任意可打印字符构成,
第二个参数表示返回字符串长度
Java代码 复制代码 收藏代码

SQL> select dbms_random.string('P',20) from dual;

DBMS_RANDOM.STRING('P',20)
----------------------------------------------------------------------
%b@e%u%Mq\S%v?@I87@U


--5.大于字符‘a’的10个字符随机字符串
Java代码 复制代码 收藏代码

SQL> select dbms_random.string('a',10) from dual;

DBMS_RANDOM.STRING('A',10)
---------------------------------------------------------------------
KJYypnMRTv


--6.生成20个字符的大写字符串
Java代码 复制代码 收藏代码

SQL> select dbms_random.string('U',20) from dual;

DBMS_RANDOM.STRING('U',20)
----------------------------------------------------------------------
ZPEVYJZNKKBEDPWYXWQU


--7.生成20个字符的字符串小写
Java代码 复制代码 收藏代码

SQL> select dbms_random.string('L',20) from dual;

DBMS_RANDOM.STRING('L',20)
----------------------------------------------------------------------
akjjxbdzvenbpocyeipj


--8.产生一个随机数(正或负)
Java代码 复制代码 收藏代码

SQL> select dbms_random.random from dual;

RANDOM
----------
-1.929E+09


--9.随机获取emp表中3条记录
Java代码 复制代码 收藏代码

SELECT * FROM
(
SELECT * FROM EMP
ORDER BY DBMS_RANDOM.random
)where rownum <4;
### Oracle 中 `DBMS_RANDOM.VALUE` 函数的使用指南 `DBMS_RANDOM.VALUE` 是 Oracle 数据库中用于生成随机数的常用函数,能够返回一个介于 0(包含)和 1(不包含)之间的随机浮点数值。该函数也可以接受两个参数以指定生成随机数的范围。 #### 基本用法 默认情况下,不传入任何参数时,`DBMS_RANDOM.VALUE` 会返回一个 [0,1) 区间内的随机数: ```sql SELECT DBMS_RANDOM.VALUE AS 随机数 FROM dual; ``` 该语句会生成一个介于 0 和 1 之间的随机浮点数[^3]。 #### 指定范围的随机数生成 如果需要生成指定范围内的随机数,可以传入两个参数:最小值和最大值。例如,生成 1 到 10 之间的随机数: ```sql SELECT DBMS_RANDOM.VALUE(1, 10) AS 范围随机数 FROM dual; ``` 该语句将返回一个介于 1(包含)和 10(不包含)之间的浮点数[^3]。 #### 生成随机整数 由于 `DBMS_RANDOM.VALUE` 返回的是浮点数,若需生成整数,可以结合 `TRUNC` 或 `ROUND` 函数进行转换。例如,生成 1 到 10 之间的整数: ```sql SELECT TRUNC(DBMS_RANDOM.VALUE(1, 10)) AS 整数 FROM dual; ``` 此语句使用 `TRUNC` 函数将浮点数截断为整数[^1]。 #### 随机排序并获取部分数据 在实际应用中,常需要从表中随机获取若干条记录。例如,从 `stu1` 表中随机选取 3 条记录: ```sql SELECT t.*, ROWNUM 排序后 FROM ( SELECT a.*, DBMS_RANDOM.VALUE 随机数 FROM stu1 a ORDER BY DBMS_RANDOM.VALUE ) t WHERE ROWNUM <= 3; ``` 此方法通过先对数据进行随机排序,再从中选取前 3 条记录,确保结果是真正随机的[^3]。 #### 生成测试数据 `DBMS_RANDOM.VALUE` 还可用于快速生成测试数据。例如,生成 1000 条测试记录: ```sql INSERT INTO test_table (id, value) SELECT LEVEL, DBMS_RANDOM.VALUE(1, 100) FROM dual CONNECT BY LEVEL <= 1000; ``` 该语句利用 `LEVEL` 伪列生成 1000 条记录,并为每条记录生成一个随机数值[^4]。 #### 注意事项 - `DBMS_RANDOM.VALUE` 生成的随机数是伪随机数,适用于测试和非加密场景。 - 在高并发环境下,若多个会话同时调用 `DBMS_RANDOM.VALUE`,可能会出现重复值[^2]。 - 若需生成随机字符串,应使用 `DBMS_RANDOM.STRING` 函数。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值