oracle系统包——dbms_random用法

本文详细介绍了Oracle中生成随机数的方法,包括返回0~1间的随机数、指定范围内的随机数、生成正态分布的随机数、随机字符串生成以及生成随机数等常用操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oracle中随机数的包的源文件目录:{oracle_home}\rdbms\admin\dbmsrand.sql

1.返回0~1间的随机数(包括0和1)
sql> select dbms_random.value from dual;

2.返回10~20间的随机数(包括10和20)
sql> select dbms_random.value(10,20) from dual;

3.随机返回一个number
sql> select dbms_random.normal from dual;
注意:normal函数返回从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间, 95%介于-2与+2之间,99%介于-3与+3之间。

4.随机返回字符串
语法:dbms_random.string(opt, len)
参数:
opt:取值,由oracle提供,如下
'u'或'U'–>返回大写字母
'l'或'L'–>返回小写字母
'a'或'A'–>大小写字母混合
'x'或'X'–>大写字母和数字混合
'p'或'P'–>任意可显示字符
当选项为其他字母的时候返回的内容仍将是大写字母
len:长度
eg:
–返回4位大写字母
sql> select dbms_random.string('U',4) FROM DUAL;
–返回4位大小写字母混合
sql> select dbms_random.string('a',4) FROM DUAL;

5.产生一个随机数(正或负)
sql> select dbms_random.random from dual;   

6.随机获取emp表中3条记录
sql> select *
     from (select * from scott.emp order by dbms_random.random)
     where rownum < 4;

### 如何在 Oracle 数据库中快速生成测试数据 #### 使用 Data Generator for Oracle 工具 为了在 Oracle 数据库中快速生成测试数据,可以利用 **Data Generator for Oracle** 这一工具。该工具能够无缝集成至 Oracle SQL Developer 中,提供直观的图形界面以及丰富的自定义选项来满足不同的需求[^1]。 用户可以通过此工具预先设定好用于创建测试数据的各项规则——比如字段的数据类型、取值范围或是特定模式等;之后仅需简单操作即可批量生产所需记录。这不仅提高了工作效率还减少了人为错误的可能性。 ```sql -- 创建表结构作为接收新生成测试数据的目标对象 CREATE TABLE test_data ( id NUMBER GENERATED BY DEFAULT AS IDENTITY, name VARCHAR2(50), age NUMBER, salary NUMBER ); -- 插入少量初始数据以便观察后续变化趋势(可选) INSERT INTO test_data (name, age, salary) VALUES ('Alice', 30, 8000); INSERT INTO test_data (name, age, salary) VALUES ('Bob', 25, 7000); ``` 对于希望进一步简化流程并提高灵活性的情况而言,还可以考虑编写 PL/SQL 存储过程或函数来自动生成符合业务逻辑要求的大规模虚拟样本集合。这种方式允许更深层次地控制每条记录的具体属性及其相互间的关系。 ```plsql DECLARE v_counter PLS_INTEGER := 0; BEGIN -- 循环插入大量随机生成的数据行 LOOP EXIT WHEN v_counter >= 998; -- 控制总数不超过千位数以防意外情况发生 INSERT INTO test_data (name, age, salary) SELECT DBMS_RANDOM.STRING('A', FLOOR(DBMS_RANDOM.VALUE(5, 50))), ROUND(DBMS_RANDOM.VALUE(18, 65)), ROUND(DBMS_RANDOM.VALUE(3000, 15000), -2) FROM DUAL; v_counter := v_counter + 1; END LOOP; COMMIT; END; / ``` 上述方法展示了两种不同层次上的解决方案:一是借助现成的应用程序插件迅速搭建起基础框架;二是深入编程层面构建更为复杂的模拟环境。两者各有优劣,在实际应用过程中可根据具体场景灵活选用最合适的策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值