在ORACLE中DBMS_RANDOM用于生成随机数、随机字符串等。接下来将简要介绍下DBMS_RANDOM该如何使用。
一、DBMS_RANDOM
ORACLE 19c中,关于DBMS_RANDOM各个子程序简要说明如下表所示:
子程序名 | FUNCTION/PROCEDURE | 功能 | 返回类型 | 状态 |
---|---|---|---|---|
INITIALIZE | PROCEDURE | 使用输入的种子值初始化包 | - | ORACLE已弃用、不推荐使用,仅用于向后兼容 |
NORMAL | FUNCTION | 返回正态分布中的随机值 | NUMBER | 正常使用 |
RANDOM | FUNCTION | 生成一个随机整数,生成区间为 [-2^^31, 2^^31] | BINARY_INTEGER | ORACLE已弃用、不推荐使用,仅用于向后兼容 |
SEED | PROCEDURE | 使用输入的种子值重置原先的种子 | - | 正常使用 |
STRING | FUNCTION | 获取随机的字符串 | VARCHAR2 | 正常使用 |
TERMINATE | PROCEDURE | 终止包 | - | ORACLE已弃用、不推荐使用,仅用于向后兼容 |
VALUE | FUNCTION | 如不提供low、hign参数,那么返回随机数值大于等于0,小于1。如提供low、hign参数那么返回随机数值大于等于low,小于hign。 | NUMBER | 正常使用 |
二、详细介绍
-
INITIALIZE
注意:此过程在ORACLE 11g 中已弃用,虽然支持,但不推荐使用,仅用于向后兼容
-- DBMS_RANDOM.INITIALIZE (val IN BINARY_INTEGER);
-- 功能:用于初始化包
-- 参数:val 随机数种子
-- 无返回值
-- 调用
CALL dbms_random.initialize(1);
-
NORMAL
-- DBMS_RANDOM.NORMAL RETURN NUMBER;
-- 用于获取符合正态分布的随机值
-- 无参数
-- 返回正态分布中的随机值
-- 调用
SELECT dbms_random.normal FROM dual;
-
RANDOM
注意:此过程在ORACLE 11g 中已弃用,虽然支持,但不推荐使用,仅用于向后兼容
-- DBMS_RANDOM.RANDOM RETURN binary_integer;
-- 功能:用于获取随机整数值
-- 无参数
-- 返回大于等于 -power(2,31)且小于power(2,31)的随机整数
-- 调用
SELECT dbms_random.random FROM dual;
-
SEED
-- DBMS_RANDOM.SEED (val IN BINARY_INTEGER);
-- DBMS_RANDOM.SEED (val IN VARCHAR2);
-- 功能:用于重置种子
-- 参数:val 随机数种子
-- 无返回值
-- 调用
CALL dbms_random.seed(100);
-
STRING
-- DBMS_RANDOM.STRING(opt IN CHAR, len IN NUMBER) RETURN VARCHAR2;
-- 功能:用于获取随机字符串
-- 参数:opt 指定返回字符串的格式:
-- 'u', 'U' - 以大写字母字符返回字符串
-- 'l', 'L' - 以小写字母字符返回字符串
-- 'a', 'A' - 以混合大小写的字母字符返回字符串
-- 'x', 'X' - 以大写字母数字字符返回字符串
-- 'p', 'P' - 以任何可打印字符返回字符串。
-- 如果输入不是上述字符,返回的字符串为大写字母。 且长度值为1,超过长度将会报错。
-- 参数:len 指定返回字符串的长度
-- 返回随机字符串
-- 调用
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('p', 10) FROM dual;
SELECT dbms_random.string('uu', 10) FROM dual; -- 超长 报错
SELECT dbms_random.string('w', 10) FROM dual; -- 输入其他字符,以大写字母字符返回字符串
-
TERMINATE
注意:此过程在ORACLE 11g 中已弃用,虽然支持,但不推荐使用,仅用于向后兼容
-- DBMS_RANDOM.TERMINATE;
-- 功能:用于结束包
-- 无返回值
-- 调用
CALL dbms_random.terminate();
-
VALUE
-- DBMS_RANDOM.VALUE RETURN NUMBER;
-- DBMS_RANDOM.VALUE(low IN NUMBER, high IN NUMBER) RETURN NUMBER;
-- 功能:如不提供low、hign参数,那么返回随机数值大于等于0,小于1。如提供low、hign参数那么返回随机数值大于等于low,小于hign。
-- 参数:low 生成的随机数大于等于low
-- 参数:high 生成的随机数小于high
-- 调用
SELECT dbms_random.value FROM dual;
SELECT dbms_random.value (10,20) FROM dual;
三、运行测试
使用羲和(Halo)数据库或ORACLE数据库运行下面的SQL语句:
-- DBMS_RANDOM.INITIALIZE
CALL dbms_random.initialize(1);
-- DBMS_RANDOM.NORMAL
SELECT dbms_random.normal FROM dual;
-- DBMS_RANDOM.RANDOM
SELECT dbms_random.random FROM dual;
-- DBMS_RANDOM.SEED
CALL dbms_random.seed(100);
-- DBMS_RANDOM.STRING 大写
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('p', 10) FROM dual;
-- 超长 报错
SELECT dbms_random.string('uu', 10) FROM dual;
-- 输入其他字符,以大写字母字符返回字符串
SELECT dbms_random.string('w', 10) FROM dual;
-- DBMS_RANDOM.TERMINATE
CALL dbms_random.terminate();
-- DBMS_RANDOM.VALUE
SELECT dbms_random.value FROM dual;
SELECT dbms_random.value (10,20) FROM dual;
若文中存在错误或不当之处,敬请指出,以便我进行修正和完善。希望这篇文章能够帮助到你。