
(一)DBMS_RANDOM包信息
DBMS_RANDOM包包含3个存储过程,4个函数,1个类型,一共8个模块,如下。
sql> desc dbms_randomElement Type ---------- --------- VALUE FUNCTION norMAL STRING RANDOM INITIAliZE PROCEDURE SEED TERMINATE NUM_ARRAY TYPE
(二)各个模块的用法
(2.1)dbms_random.value ( function)
如果不输入任何参数,该函数默认返回一个0到1之间的随机数字。准确的说,该小数取值范围为[0,1),即包含0但是不包含1。在小数点右边有38位数字。
如果输入最小值和最大值,那么将会返回一个在最小值和最大值之间的数据。
语法:
DBMS_RANDOM.VALUE RETURN NUMBER;或是DBMS_RANDOM.VALUE( low IN high ) NUMBER;
例子:
默认生成0到1之间的随机数sqlselect dbms_random.value from dual; VALUE--------0.28510444输入上下限,生成10~20之间的随机数sqlselect dbms_random.value(10,20) dual;DBMS_RANDOM.VALUE(20)---------------------- 14.8069717352864
(2.2)dbms_random.normal(function)
生成一个正态分布的随机数,关于正态分布,从网上查找资料,大致可以了解到,通过dbms_random.normal生成的数据,其分布范围为:
从-1到1之间的数据占68%,从-2到2之间的数据占95%,从-3到3之间的数据占99%
图1.正态分布
语法:
注意,该function没有输入参数DBMS_RAMDOM.norMAL NUMBER;
例子:
sqlselect dbms_random.normal dual; norMAL0.35939267
(2.3)dbms_random.string(function)
该函数生成一个随机字符串。
语法:
DBMS_RANDOM.STRING( opt CHAR,len ) VARCHAR2;
该函数需要传入2个参数,opt
| Parameter | Description |
| opt | 用来定义返回的字符串的样式: 'u','U' --返回大写字母的字符串'l','L' --返回小写字母的字符串'a','A' --返回大小写混合的字符串'x','X' -- 返回大写字母与数字结合的字符串'p','P' --返回任何可打印的字符串否则返回大写字母字符串。 |
| len | 返回字符串的长度 |
例子:
返回大写字母组成的字符串sqlselect dbms_random.string('u',1); Font-weight: bold">10) dual;DBMS_RANDOM.STRING(U10----------------------------------RLYKTDIRGI返回小写字母组成的字符串sqllL-----------------------------------auyuhusjfe返回大小写混合的字符串sqlaAOyNQIrlzVW返回大写字母+数字混合的字符串sqlxX---------------------------------------XEXVNQ7Y5R返回任意可以打印的字符串sqlpP------------------------------------.ZPb-V.i.-如果指定的不是上面的参数,则返回大写字母组成的字符串sqlsS----------------------------------PolCDVHRKE
(2.4)dbms_random.random(function)
返回一个大于或等于-power(2,31)到小于或等于power(2,31)的随机数。不过Oracle不建议使用该函数,因为在11gR1中废弃了。
“Note:This procedure is deprecated with Release 11gR1 and,although currently supported,it should not be used.”
语法:
DBMS_RANDOM.RANDOM RETURN binary_integer;
例子
sqlselect dbms_random.random dual; RANDOM-------- 325418642
(2.5)dbms_random.initialize(procedure)
该存储过程用于初始化生成器。与ramdom一样,Oracle不建议使用该函数,因为在11gR1中废弃了。
该存储过程已经过时,因为它只是简单的调用seed存储过程(原文:This procedure is obsolete as it simply calls the SEED Procedures.)
语法:
DBMS_RANDOM.INITIAliZE( val IN BINARY_INTEGER);
(2.6)dbms_random.seed(procedure)
该存储过程用于设定种子。在设定种子之后,可以确保每次执行输出的结果相同。
语法:
DBMS_RANDOM.SEED ( val IN BINARY_INTEGER);或者DBMS_RANDOM.SEED ( val VARCHAR2);
例子:
未设定seed,2次执行同一个pl/sql块,结果不同
--第1次执行sqlbegin 2 for i in 1..5 loop 3 dbms_output.put_line(dbms_random.value(1,1)">)); 4 end loop; 5 ; 6 /7.597679295753961538122594520346564384316.975392652223757308528393074122024304317.338065316523423086138783384470914281074.892453340137337385084377865576338980741.38879870308996313960638201385754773661PL/sql procedure successfully completed--第2次执行sql8.16839652271000070683587166503358000155.433753832396975805915810034458488644224.695195569516574129113318590486061345681.988742825332309762618626223358178941016.57191642048605638448861960830764815336procedure successfully completed
设定seed,2次执行同一个pl/sql块,结果相同
--第1次执行sql2 dbms_random.seed(jiaman'); 3 4 dbms_output.put_line(dbms_random.value(5 6 7 7.888714862485784624612209685382064165099.93392156549441113802185796591058206749.265872203763468889186003807847431259569.96308822080053890882578509318545143693.35183691734731293112104762732782208283 successfully completed
--第2次执行 sqlprocedure successfully completed
(2.7)dbms_random.terminate(procedure)
当用完dbms_random包后,调用terminate存储过程。11gR1 版本不推荐使用此过程,虽然当前支持,但不应使用此过程。
语法:
dDBMS_RANDOM.TERMINATE;
(2.8)dbms_random.num_array(type)
参考文档:https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_random.htm#ARPLS67506
总结
以上是内存溢出为你收集整理的oracle使用DBMS_RANDOM包生成随机数据全部内容,希望文章能够帮你解决oracle使用DBMS_RANDOM包生成随机数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)