羲和(Halo)数据库——DBMS_RANDOM浅尝

在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 正常使用


二、详细介绍

  1. INITIALIZE

    注意:此过程在ORACLE 11g 中已弃用,虽然支持,但不推荐使用,仅用于向后兼容

    -- DBMS_RANDOM.INITIALIZE (val IN BINARY_INTEGER); -- 功能:用于初始化包 -- 参数:val 随机数种子 -- 无返回值 -- 调用 CALL dbms_random.initialize(1);

  2. NORMAL

    -- DBMS_RANDOM.NORMAL RETURN NUMBER; -- 用于获取符合正态分布的随机值 -- 无参数 -- 返回正态分布中的随机值 -- 调用 SELECT dbms_random.normal FROM dual;

  3. RANDOM

    注意:此过程在ORACLE 11g 中已弃用,虽然支持,但不推荐使用,仅用于向后兼容

    -- DBMS_RANDOM.RANDOM RETURN binary_integer; -- 功能:用于获取随机整数值 -- 无参数 -- 返回大于等于 -power(2,31)且小于power(2,31)的随机整数 -- 调用 SELECT dbms_random.random FROM dual;

  4. SEED

    -- DBMS_RANDOM.SEED (val IN BINARY_INTEGER); -- DBMS_RANDOM.SEED (val IN VARCHAR2); -- 功能:用于重置种子 -- 参数:val 随机数种子 -- 无返回值 -- 调用 CALL dbms_random.seed(100);

  5. 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; -- 输入其他字符,以大写字母字符返回字符串

  6. TERMINATE

    注意:此过程在ORACLE 11g 中已弃用,虽然支持,但不推荐使用,仅用于向后兼容

    -- DBMS_RANDOM.TERMINATE; -- 功能:用于结束包 -- 无返回值 -- 调用 CALL dbms_random.terminate();

  7. 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;