[[Oracle APEX]]
场景
测试需要造模拟数据
SQL
参考博主
随机数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
-- 0-100的随机小数
SELECT dbms_random.value(0,100)
FROM dual;
-- 正态分布的随机数
select dbms_random.normal from dual ;
-- 随机字符串
select dbms_random.string('p', 3) from dual ;
/**********************************************************************************************************************************
2024/10/22 10:32
可取值如下:
'u','U' : 大写字母
'l','L' : 小写字母
'a','A' : 大、小写字母
'x','X' : 数字、大写字母
'p','P' : 可打印字符
**********************************************************************************************************************************/
|
随机取数据
- 快速随机取数据
1
2
|
--参数表示取样百分比,缺省时,取头10条
SELECT * FROM EBILL_ELECTRONIC_BILL SAMPLE(1) WHERE ROWNUM <= 10;
|
1
2
|
--参数表数据存储区间取样百分比,必填
SELECT * FROM EBILL_ELECTRONIC_BILL SAMPLE BLOCK(1) WHERE ROWNUM <= 10;
|
主要注意以下几点:
1. sample_percent是一个数字,定义结果集中包含记录占总记录数量的百分比,值应该在[0.000001,99.999999]之间。
2. sample只对单表生效,不能用于表连接和远程表
3. sample会使SQL自动使用CBO(基于代价的优化器)
- 依据 dbms_random.value随机取数据
会全表扫描(Full table Scan),比较慢,不推荐使用:
1
2
3
|
SELECT *
FROM (SELECT * FROM EBILL_ELECTRONIC_BILL ORDER BY DBMS_RANDOM.VALUE)
WHERE ROWNUM <= 10
|
excel
- 随机小数
=RANDBETWEEN(1,6000)/100
随机更新一批数据
1
2
3
4
5
6
7
8
9
|
BEGIN
FOR i IN (SELECT id
FROM REAGENT_CUSTOMER_CONF_PO SAMPLE (50))
LOOP
UPDATE REAGENT_CUSTOMER_CONF_PO
SET PROJECTLEADER ='huo-' || dbms_random.string('A', 5)
WHERE id = i.id;
END LOOP;
END;
|