模拟数据-随机

[[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. 快速随机取数据
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(基于代价的优化器)

  1. 依据 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

  1. 随机小数 =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;
Licensed under CC BY-NC-SA 4.0
最后更新于 2025-12-02 10:58
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计