随机生成字符串、数值、日期
1、小数( 0 ~ 1)
select dbms_random.value from dual;
效果
第1个数 .27649212609913378601170432655531348845
第2个数 .51780259665797921024691744758263588247
第3个数 .3281577656166021945550228271681490438
第4个数 .28783637115401688731038731805359172599
第5个数 .64859276749094527838105850393095262083
第6个数 .15259397305935118546587614431651029385
第7个数 .63392083241418291367234094693566646025
第8个数 .61089085467800809427648137645201400897
第9个数 .76155422809958222535466816251754489458
2、小数 ( 0 ~ 100 )
select dbms_random.value(0,100) from dual;
效果
第1个数 45.829880094487055132264212535999320978
第2个数 69.240337484680275292747246967947873122
第3个数 72.871698906970818468442812429979995667
第4个数 78.935431655577996702294522718862604361
第5个数 99.561069942785881289039861561928338558
第6个数 35.635802441099567563003664566722500994
第7个数 93.777771766479536226856998853973017061
第8个数 51.125479875078824768766095060621535232
第9个数 92.303839460882387697547049237471897234
3、指定范围内的整数 ( 0 ~ 100 )
select trunc(dbms_random.value(0,100)) from dual;
效果
第1个数 16
第2个数 15
第3个数 22
第4个数 74
第5个数 34
第6个数 69
第7个数 29
第8个数 67
第9个数 3
4、长度为20的随机数字串
select substr(cast(dbms_random.value as varchar2(38)),3,20) from dual;
效果
第1个数 31353314575653458096
第2个数 63865391627538848672
第3个数 76043551830416790552
第4个数 54991341856496428947
第5个数 98694072923106487954
第6个数 19609626772338916528
第7个数 96114284294511564109
第8个数 37852242191741808795
第9个数 04832197672579950847
5、正态分布的随机数
select dbms_random.normal from dual;
效果
第1个数 .5255773441460231847439155519326505424675
第2个数 -.8377900870952858104039353566550215199434
第3个数 -.9666998329544350170021950847727003685323
第4个数 -1.55175936065588954150474939853161491069
第5个数 -1.1322587314253822214090695828131885242
第6个数 .4600715969821294964198564988592211360314
第7个数 .8373502751106704170093441128939655393042
第8个数 .2463738134175969999145481325701943577436
第9个数 .0654702821023234490540766797332884757942
6、随机字符串
select dbms_random.string(opt, length) from dual;
opt 可取值如下:
'u','U' : 大写字母
'l','L' : 小写字母
'a','A' : 大、小写字母
'x','X' : 数字、大写字母
'p','P' : 可打印字符
效果
-- select dbms_random.string('u', 10) from dual;
第1个数 KCOYARJOEJ
第2个数 VSFPXHYSGB
第3个数 GIFWHDBXPI
第4个数 IRUPMBTIWS
第5个数 WWFNVXOHCE
第6个数 ZYEEMSFQWP
第7个数 ZSGZZHUZXU
第8个数 ZVPLPCFTDK
第9个数 IBWUNUJAGI
7、随机日期
select to_date(2454084+TRUNC(DBMS_RANDOM.VALUE(0,365)),'J') from dual
效果
第1个数 13-8月 -07
第2个数 13-9月 -07
第3个数 25-12月-06
第4个数 29-1月 -07
第5个数 19-8月 -07
第6个数 14-10月-07
第7个数 09-2月 -07
第8个数 12-12月-07
第9个数 10-6月 -07
通过下面的语句获得指定日期的基数
select to_char(sysdate,'J') from dual;
效果
第1个数 2459485
第2个数 2459484
第3个数 2459483
第4个数 2459482
第5个数 2459481
第6个数 2459480
第7个数 2459479
第8个数 2459478
第9个数 2459477
8、生成GUID
select sys_guid() from dual;
效果
第1个数 54E8920AD7C34F979DB2E1D39A6987AC
第2个数 867A46817CDC400ABBBB65EE2D780E54
第3个数 95FA1A0CF4264977833D5BC6C3FCCF63
第4个数 E6352B4EB73F41F78CAC9653340AF3D6
第5个数 6DE03B07F50849DC9B54E94F9EE437B1
第6个数 8D70F3B9619B4BF1A30BA44449C3B61C
第7个数 BB9EE6DC4AF04991A806984DECC3C7C3
第8个数 641CCB25FCB94E139C8F12B13EFA6FA1
第9个数 8C3BC8202CE64DCA9F4C3059D9E3058F
尝试一下
DECLARE
str VARCHAR2(100);
BEGIN
DBMS_OUTPUT.PUT_LINE(chr(10)||'1、小数( 0 ~ 1)');
FOR i IN 1..9 LOOP
DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||dbms_random.value);
END LOOP;
DBMS_OUTPUT.PUT_LINE(chr(10)||'2、小数( 0 ~ 100)');
FOR i IN 1..9 LOOP
DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||dbms_random.value(0, 100));
END LOOP;
DBMS_OUTPUT.PUT_LINE(chr(10)||'3、指定范围内的整数 ( 0 ~ 100 )');
FOR i IN 1..9 LOOP
DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||trunc(dbms_random.value(0,100)));
END LOOP;
DBMS_OUTPUT.PUT_LINE(chr(10)||'4、长度为20的随机数字串');
FOR i IN 1..9 LOOP
SELECT substr(cast(dbms_random.value as varchar2(38)),3,20) INTO str FROM dual;
DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||str);
END LOOP;
DBMS_OUTPUT.PUT_LINE(chr(10)||'5、正态分布的随机数');
FOR i IN 1..9 LOOP
DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||dbms_random.normal);
END LOOP;
DBMS_OUTPUT.PUT_LINE(chr(10)||'6、随机字符串');
FOR i IN 1..9 LOOP
DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||dbms_random.string('u', 10));
END LOOP;
DBMS_OUTPUT.PUT_LINE(chr(10)||'7、随机日期');
FOR i IN 1..9 LOOP
DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||to_date(2454084+TRUNC(DBMS_RANDOM.VALUE(0,365)),'J'));
END LOOP;
DBMS_OUTPUT.PUT_LINE(chr(10)||'指定日期的基数');
FOR i IN 1..9 LOOP
DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||to_char(sysdate-i,'J'));
END LOOP;
DBMS_OUTPUT.PUT_LINE(chr(10)||'8、生成GUID');
FOR i IN 1..9 LOOP
DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||sys_guid());
END LOOP;
-- DBMS_OUTPUT.PUT_LINE('');
-- FOR i IN 1..9 LOOP
-- DBMS_OUTPUT.PUT_LINE(' 第'||i||'个数 '||);
-- END LOOP;
--
END;