oracle批量造测试数据

DBMS_RANDOM
1.values方法

-- 无参数时生成38位精度的数值,范围0-1
-- 有参数时,第一个数字为下限,是二个数字为上限
SELECT DBMS_RANDOM.VALUE() FROM DUAL;
SELECT DBMS_RANDOM.VALUE(20,30) FROM DUAL;

2.normal方法

--生成一个符合正态分布的随机数,此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间, 95%介于-2与+2之间,99%介于-3与+3之间。
SELECT DBMS_RANDOM.NORMAL FROM DUAL;

3.random方法

--返回值的范围为: [-2^31, 2^31),返回的是整数。
SELECT DBMS_RANDOM.RANDOM() FROM DUAL;

4.string方法

-- 'u'或'U',仅返回大写字母
-- 'l'或'L',仅返回小写字母
-- 'a'或'A',返回大小写字母混合
-- 'x'或'X',返回大写字母和数字混合
-- 'p'或'P',返回任意可显示字符
select dbms_random.string('u',10) from dual;
select dbms_random.string('L',10) from dual;
select dbms_random.string('a',10) from dual;
select dbms_random.string('X',10) from dual;
select dbms_random.string('X',10) from dual;
select dbms_random.string('p',10) from dual;
--建表语句
CREATE TABLE ORDER_TABLE
(
ORDER_ID NUMBER
,USER_CODE VARCHAR2(256)
,GOODS_NAME VARCHAR2(256)
,ORDER_DATE DATE
,CITY VARCHAR2(256)
,ORDER_NUM NUMBER
);
COMMENT ON TABLE ORDER_TABLE IS '订单表 ';
COMMENT ON COLUMN ORDER_TABLE.ORDER_ID IS '订单ID';
COMMENT ON COLUMN ORDER_TABLE.USER_CODE IS '下单用户ID';
COMMENT ON COLUMN ORDER_TABLE.GOODS_NAME IS '商品名称';
COMMENT ON COLUMN ORDER_TABLE.ORDER_DATE IS '下单日期';
COMMENT ON COLUMN ORDER_TABLE.CITY IS '下单城市';
COMMENT ON COLUMN ORDER_TABLE.ORDER_NUM IS '订单数量';

--创建自增序列
CREATE SEQUENCE SE_ORDER_ID  --序列名称
MINVALUE 1001 --最小值
;

--创建循环插入1000条记录的存储过程
CREATE OR REPLACE PROCEDURE SP_CREATE_DATA IS
BEGIN
    FOR X IN 1..1000
        LOOP
            INSERT INTO ORDER_TABLE
            VALUES ( se_order_id.nextval --引用自增序列
                   , DBMS_RANDOM.STRING('x', 8) --获取8位随机数字加字母
                   , CASE TRUNC(DBMS_RANDOM.VALUE(1, 6)) --随机选取5个枚举值
                         when 1 then '零食大礼包A'
                         when 2 then '零食大礼包B'
                         when 3 then '零食大礼包C'
                         when 4 then '零食大礼包D'
                         when 5 then '零食大礼包E'
                         END
                   , TO_DATE(TO_CHAR(TO_DATE('20210101', 'yyyymmdd'), 'J') -
                             TRUNC(DBMS_RANDOM.VALUE(1, TO_DATE('20210101', 'yyyymmdd') -
                                                        ADD_MONTHS(TO_DATE('20210101', 'yyyymmdd'), -12))
                                 - 1), 'J')
                       -- to_char(sysdate, 'J') 自公元前 4712 年1月1日到指定日期的总天数
                   , CASE TRUNC(DBMS_RANDOM.VALUE(1, 6)) --随机选取5个枚举值
                         when 1 then '北京'
                         when 2 then '上海'
                         when 3 then '广州'
                         when 4 then '深圳'
                         when 5 then '杭州'
                         END
                   , TRUNC(DBMS_RANDOM.VALUE(1, 11)) --获取1-10的随机整数
                   );
        END LOOP;
    COMMIT;
END SP_CREATE_DATA;

--创建存储过程循环上一个存储过程500次
CREATE OR REPLACE PROCEDURE SP_500 IS
BEGIN
  FOR X IN 1..500 LOOP
    SP_CREATE_DATA;
END LOOP;
END;

--调用存储过程  生成50w条数据
BEGIN
    SP_500;
end;

--查看表数据
SELECT * FROM ORDER_TABLE;

参考文献:https://zhuanlan.zhihu.com/p/355855958

你可能感兴趣的:(oracle,数据库,linux)