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

2024年 1月 10日 44.2k 0

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

若文中存在错误或不当之处,敬请指出,以便我进行修正和完善。希望这篇文章能够帮助到你。

相关文章

PostgreSQL系数据库使用COPY导数时如何实现增量及重复数据更新导入
oracle 自动撤销
oracle NLS_LANGUAGE
Oracle NetSuite 客户说 | 借数字化之力“轻装”出海,让中国品牌全球热卖
脚本:自动生成精准的Oracle AWR报告
担心异构数据库迁移踩“坑”?听听大咖们怎么说

发布评论