作用说明:
DBMS_RANDOM包提供了一个内置的随机数生成器。里面包含了很多的方法。
DBMS_RANDOM子程序的摘要:
方法描述INITIALIZE procedure
用种子值初始化包。
NORMAL function
返回正态分布中的随机数。
RANDOM function
生成一个随机数。
SEED procedure
重置种子。
STRING function
获取一个随机字符串。
TERMINATE procedure
终止包。
VALUE function
一个版本获得一个大于或等于0且小于1的随机数,小数点右边有38位(38位精度)。另一个版本获得一个随机Oracle数据库号x,其中x大于或等于一个指定的下限,而小于一个指定的上限。
常用方法案例:
1. DBMS_RANDOM.RANDOM方法:
语法:DBMS_RANDOM.RANDOM RETURN binary_integer;
说明:random返回的是BINARY_INTEGER类型值,产生一个任意大小的随机数(正或负)。
SQL> SELECT DBMS_RANDOM.RANDOM FROM DUAL; RANDOM ---------- -900131307 --产生一个任意大小的随机正数 SQL> SELECT abs(DBMS_RANDOM.RANDOM/100) FROM DUAL; ABS(DBMS_RANDOM.RANDOM/100) --------------------------- 19653484.99 --产生一个100以内的随机正数(mod取余,可指定其它数字以内的数) SQL> SELECT ABS(MOD(DBMS_RANDOM.RANDOM,100)) FROM DUAL; ABS(MOD(DBMS_RANDOM.RANDOM,100 ------------------------------ 282.DBMS_RANDOM.VALUE用法:有两种用法
语法:
DBMS_RANDOM.VALUE RETURN NUMBER; DBMS_RANDOM.VALUE( low IN NUMBER, high IN NUMBER) RETURN NUMBER;FUNCTION value RETURN NUMBER;
说明:这种用法没有参数,会返回一个具有38位精度的数值,范围从0.0到1.0,但不包括1.0。
示例:
--产生一个0~1之间的随机数 sql>SELECT dbms_random.value FROM dual; VALUE ---------- 0.24031434 --产生一个100~1000之间的随机数,不带小数(trunc) sql>SELECT TRUNC(100+900*DBMS_RANDOM.VALUE) FROM dual; TRUNC(100+900*DBMS_RANDOM.VALUE) -------------------------------- 122FUNCTION value (low IN NUMBER, high IN NUMBER) RETURN NUMBER;
说明:value带有两个参数,第一个指下限,第二个指上限,将会生成下限到上限之间的数字,但不包含上限。
示例:
--产生一个10~20之间的随机数 sql>SELECT dbms_random.value(10,20) FROM dual; DBMS_RANDOM.VALUE(10,20) ------------------------ 16.50683437189813.DBMS_RANDOM.NORMAL用法:
语法:DBMS_RANDOM.NORMAL RETURN NUMBER;
说明:获取正态分布的随机数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。
示例:
SQL> exec dbms_output.put_line(round(dbms_random.normal)); 1 PL/SQL procedure successfully completed SQL> exec dbms_output.put_line(round(dbms_random.normal)); 0 PL/SQL procedure successfully completed SQL> exec dbms_output.put_line(round(dbms_random.normal)); -1 PL/SQL procedure successfully completed SQL> exec dbms_output.put_line(round(dbms_random.normal)); 0 PL/SQL procedure successfully completed SQL> exec dbms_output.put_line(round(dbms_random.normal)); 1 PL/SQL procedure successfully completed SQL> exec dbms_output.put_line(round(dbms_random.normal)); -2 PL/SQL procedure successfully completed4.dbms_random.string用法:
语法:
DBMS_RANDOM.STRING opt IN CHAR, len IN NUMBER) RETURN VARCHAR2;说明:某些用户管理程序可能需要为用户创建随机的密码。使用10G下的dbms_random.string 可以实现这样的功能。
参数:opt :
■ 'u', 'U' - returning string in uppercase alpha characters >返回大写字母
■ 'l', 'L' - returning string in lowercase alpha characters >返回小写字母
■ 'a', 'A' - returning string in mixed case alpha characters >大小写字母混合
■ 'x', 'X' - returning string in uppercase alpha-numericcharacters >大写字母和数字混合
■ 'p', 'P' - returning string in any printable characters. >任意可显示字符
Otherwise the returning string is in uppercase alphacharacters. >当选项为其他字母的时候返回的内容仍将是大写字母
len :表示返回的字符串长度。
SQL> SELECT DBMS_RANDOM.STRING('u', 10) FROM DUAL 2 UNION ALL 3 SELECT DBMS_RANDOM.STRING('U', 10) FROM DUAL 4 UNION ALL 5 SELECT DBMS_RANDOM.STRING('l', 10) FROM DUAL 6 UNION ALL 7 SELECT DBMS_RANDOM.STRING('L', 10) FROM DUAL 8 UNION ALL 9 SELECT DBMS_RANDOM.STRING('a', 10) FROM DUAL 10 UNION ALL 11 SELECT DBMS_RANDOM.STRING('A', 10) FROM DUAL 12 UNION ALL 13 SELECT DBMS_RANDOM.STRING('x', 10) FROM DUAL 14 UNION ALL 15 SELECT DBMS_RANDOM.STRING('X', 10) FROM DUAL 16 UNION ALL 17 SELECT DBMS_RANDOM.STRING('P', 10) FROM DUAL 18 UNION ALL 19 SELECT DBMS_RANDOM.STRING('P', 10) FROM DUAL; DBMS_RANDOM.STRING('U',10) -------------------------------------------------------------------------------- XZMZMEOIDC ZXYHCYGLUX gbyajvsacl wtrbzznbvq TOxeaGftRN zjyMaNpJze NF2T5ZWGCX LMPQHR6JWP '`a