当前位置:Gxlcms >
数据库问题 >
[转]Oracle dbms_random函数用法快速生成多条测试数据
[转]Oracle dbms_random函数用法快速生成多条测试数据
时间:2021-07-01 10:21:17
帮助过:3人阅读
to_char(sysdate + rownum / 24 / 3600, ‘yyyy-mm-dd hh24:mi:ss‘) as inc_datetime,
trunc(dbms_random.value(0, 100)) as random_id,
dbms_random.string(‘$‘, 20) random_string
from dual
connect by level <= 100;

以上代码中并没有插入数据库中,若要插入只需要对sql上增加create table 表 as 或 insert into select方式
上面SQL是利用了Oracle数据库语法的几个实用小技巧实现的:
1、利用Oracle特有的“connect by”树形连接语法生成测试记录,“level <= 10”表示要生成10记录;
2、利用rownum虚拟列生成递增的整数数据;
3、利用sysdate函数加一些简单运算来生成日期数据,本例中是每条记录的时间加1秒;
4、利用dbms_random.value函数生成随机的数值型数据,本例中是生成0到100之间的随机整数;
5、利用dbms_random.string函数生成随机的字符型数据,本例中是生成长度为20的随机字符串,字符串中可以包括字符或数字。
dbms_random.函数中的参数介绍
[sql] view plaincopyprint?
- select decode(trunc(dbms_random.value(0, 2)),‘0‘,‘女‘,‘1‘,‘男‘) from dual
- select length(dbms_random.random) from dual;
- select abs(mod(dbms_random.random,100)) from dual;
- select trunc(10+90*dbms_random.value) from dual;
- select dbms_random.value from dual;
- select dbms_random.value(10,20) from dual;
- select dbms_random.normal from dual;
-
-
- select to_date(trunc(dbms_random.value(to_number(to_char(sysdate-10, ‘J‘)), to_number(to_char(sysdate, ‘J‘)))), ‘J‘) from dual;
- select (sysdate - 1 / 24 / 60 * 30) + dbms_random.value (1, 1800) / 3600 / 24 from dual;
- select to_date(to_char(to_date(‘2015-01-01‘, ‘yyyy-MM-dd‘), ‘J‘) + trunc(DBMS_RANDOM.VALUE(0, 365)), ‘J‘) from dual;
- select to_date(trunc(dbms_random.value(to_number(to_char(to_date(‘20150501‘, ‘yyyymmdd‘),‘J‘)),
- to_number(to_char(to_date(‘20150531‘, ‘yyyymmdd‘) + 1, ‘J‘)))
- ), ‘J‘) + dbms_random.value(1, 3600) / 3600 prize_time
- from dual;
-
- select to_date(trunc(dbms_random.value(
- to_number(to_char(add_months(sysdate,-100 * 12),‘J‘)),
- to_number(to_char(sysdate + 1, ‘J‘)))
- ), ‘J‘) + dbms_random.value(1, 3600) / 3600 from dual;
-
-
- select dbms_random.string(‘u‘, 20) from dual
- select dbms_random.string(‘l‘, 20) from dual
- select dbms_random.string(‘a‘, 20) from dual
- select dbms_random.string(‘x‘, 20) from dual
- select dbms_random.string(‘p‘, 20) from dual
-
那要生成10万条测试记录表可以用如下SQL:
create table myTestTable as
select rownum as id,
to_char(sysdate + rownum/24/3600, ‘yyyy-mm-dd hh24:mi:ss‘) as inc_datetime,
trunc(dbms_random.value(0, 100)) as random_id,
dbms_random.string(‘x‘, 20) random_string
from dual
connect by level <= 100000;
-
DBMS_RANDOM.STRING用法:
1)选项‘u‘, ‘U‘ - returning string in uppercase alpha characters
2)选项‘l‘, ‘L‘ - returning string in lowercase alpha characters
3)选项‘a‘, ‘A‘ - returning string in mixed case alpha characters
4)选项‘x‘, ‘X‘ - returning string in uppercase alpha-numeric characters
5)选项‘p‘, ‘P‘ - returning string in any printable characters.
6)选项 Otherwise the returning string is in uppercase alpha characters.
例子:
生成由大写字母和数字组成的8位密码
sys@ora11g>select dbms_random.string(‘x‘,8) "x_8_password" from dual;
x_8_password
----------------------------------------------
TT3ISGUV
[转]Oracle dbms_random函数用法快速生成多条测试数据
标签: