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;