oracle中用于生成随机数的包:DBMS_RANDOM,这个包里面包含了很多方法,以下列出几个常用的方法

1.DBMS_RANDOM.RANDOM方法:

  • FUNCTION random RETURN BINARY_INTEGER;

  说明:random返回的是BINARY_INTEGER类型值,产生一个任意大小的随机数(正或负)。

  示例:

SELECT DBMS_RANDOM.RANDOM FROM DUAL;
RANDOM
----------
-478838704 --产生一个任意大小的随机正数
SELECT abs(DBMS_RANDOM.RANDOM/100) FROM DUAL;
ABS(DBMS_RANDOM.RANDOM/100)
---------------------------
698869.43 --产生一个100以内的随机正数(mod取余,可指定其它数字以内的数)
SELECT ABS(MOD(DBMS_RANDOM.RANDOM,100)) FROM DUAL;
ABS(MOD(DBMS_RANDOM.RANDOM,100))
--------------------------------
60

2.DBMS_RANDOM.VALUE用法:有两种用法

  • FUNCTION value RETURN NUMBER;

  说明:这种用法没有参数,会返回一个具有38位精度的数值,范围从0.0到1.0,但不包括1.0。

  示例:

--产生一个0~1之间的随机数
sql>SELECT dbms_random.value FROM dual; VALUE
----------
.625810105 --产生一个100~1000之间的随机数,不带小数(trunc)
sql>SELECT TRUNC(100+900*DBMS_RANDOM.VALUE) FROM dual;
TRUNC(100+900*DBMS_RANDOM.VALUE)
--------------------------------
743
  • FUNCTION 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)
------------------------
11.1480576

3.DBMS_RANDOM.NORMAL用法:

  • FUNCTION normal RETURN NUMBER;

  说明:获取正态分布的随机数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。

  示例:

sql>BEGIN
  FOR i IN 1 .. 10 LOOP
  dbms_output.put_line(round(dbms_random.normal));
  END LOOP;
END;
  /
0
0
0
0
-1
2
-1
-1
2
0
PL/SQL 过程已成功完成。

4.dbms_random.string用法:

  • FUNCTION string (opt CHAR, len 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
UNION ALL
SELECT DBMS_RANDOM.STRING('U', 10) FROM DUAL
UNION ALL
SELECT DBMS_RANDOM.STRING('l', 10) FROM DUAL
UNION ALL
SELECT DBMS_RANDOM.STRING('L', 10) FROM DUAL
UNION ALL
SELECT DBMS_RANDOM.STRING('a', 10) FROM DUAL
UNION ALL
SELECT DBMS_RANDOM.STRING('A', 10) FROM DUAL
UNION ALL
SELECT DBMS_RANDOM.STRING('x', 10) FROM DUAL
UNION ALL
SELECT DBMS_RANDOM.STRING('X', 10) FROM DUAL
UNION ALL
SELECT DBMS_RANDOM.STRING('P', 10) FROM DUAL
UNION ALL
SELECT DBMS_RANDOM.STRING('P', 10) FROM DUAL; DBMS_RANDOM.STRING('U',10)
------------------------------------------------------------------
MBYRHYLAZA
QSZAEWXBTZ
pidhbftajy
erutcrkoqs
HIjazdaqws
zrjqndNkjh
UMNRRQDEKS
K18GHLWM40
&gp$fx5#Ik
<90<Luu%vT

5.dbms_random.seed用法

  • PROCEDURE seed(val IN BINARY_INTEGER);或PROCEDURE seed(val IN VARCHAR2);

  说明:用于生成一个随机数种子,设置种子的目的是可以重复生成随机数,用于调试。否则每次不同,难以调度。

  --可以设置seed来确定随机数的起始点,对于相同的seed而言,随机数的任意一次变化都将是确定的。
  – 就是说,如果在某一时刻调用了seed,之后第一次产生的随机数是4,第二次是6,第三次是1,
  – 那么当你再次调用相同的seed之后,一次产生的随机数还是4、6、1
  – seed有两种,一种是数 型的,一种是字符型(最大长度2000)的

  示例:

--session1
SELECT USERENV('SESSIONID') FROM DUAL; USERENV('SESSIONID')
--------------------
15140521 SQL> BEGIN
    dbms_random.seed(100);
  END;
  / PL/SQL procedure successfully completed SQL> SELECT DBMS_RANDOM.value
  FROM DUAL
  CONNECT BY LEVEL < 10; VALUE
----------
0.53801770
0.67499536
0.65362270
0.76351985
0.29859834
0.40522032
0.99551636
0.39565580
0.18074760
--SESSION 2
SQL> SELECT USERENV('SESSIONID') FROM DUAL; USERENV('SESSIONID')
--------------------
15140517 SQL> BEGIN
  dbms_random.seed(100);
END;
/ PL/SQL procedure successfully completed SQL> SELECT DBMS_RANDOM.value FROM DUAL
CONNECT BY LEVEL < 10; VALUE
----------
0.53801770
0.67499536
0.65362270
0.76351985
0.29859834
0.40522032
0.99551636
0.39565580
0.18074760

注意:当随机数据做为过滤条件时如下这么写:会找不到数据、多行

 SELECT * FROM test WHERE n = ROUND(dbms_random.value(1,3));--可改成 n = (SELECT ROUND(dbms_random.value(1,3)) FROM dual)

SQL> SELECT n FROM test1 WHERE n = ROUND(dbms_random.value(1,3));
N
----------
1
2
SQL> SELECT n FROM test1 WHERE n = ROUND(dbms_random.value(1,3));
未选定行 SQL> SELECT n FROM test1 WHERE n = ROUND(dbms_random.value(1,3));
N
----------
1

你无法预测或者控制SQL里面调用这个函数的次数。
正确的办法是先将dbms_random.value存入变量,然后在SQL中使用这个变量

DBMS_RANDOM 用法的更多相关文章

  1. oracle系统包——dbms_random用法及order by 小结(转)

    dbms_random是一个可以生成随机数值或者字符串的程序包. 这个包有initialize().seed().terminate().value().normal().random().strin ...

  2. oracle系统包——dbms_random用法

    oracle中随机数的包的源文件目录:{oracle_home}\rdbms\admin\dbmsrand.sql 1.返回0~1间的随机数(包括0和1)sql> select dbms_ran ...

  3. Oracle DBMS_RANDOM

    DBMS_RANDOM.VALUE -- [0,1)的38位精度小数 SELECT DBMS_RANDOM.VALUE FROM DUAL; -- [10,20)的38位精度小数 SELECT DBM ...

  4. Oracle中dbms_random.string 的用法

    转载:https://blog.csdn.net/simonchi/article/details/8657787 DBMS_RANDOM.STRING(var1,var2) 这个函数有两个参数 va ...

  5. [转]Oracle dbms_random函数用法快速生成多条测试数据

    Java 随机生成中文姓名,手机号,邮编,住址:http://blog.csdn.net/xiaokui_wingfly/article/details/45913885 Java 批量随机生成身份证 ...

  6. Oracle dbms_random包的用法

    1.dbms_random.value方法 dbms_random是一个可以生成随机数值或者字符串的程序包.这个包有initialize().seed().terminate().value().no ...

  7. Oracle之DBMS_RANDOM包详解

    DBMS_RANDOM是Oracle提供的一个PL/SQL包,用于生成随机数据和字符.它具有以下函数. 其中,initialize,random,terminate函数在Oracle11g中已不推荐使 ...

  8. Oracle的trunc和dbms_random.value随机取n条数据

    今天在review项目代码的时候看到这样一个问题,有一张号码表,每次需要从这样表中随机取6个空闲的号码,也就是每次取出来的6个号码应该都会有所不同.然后我就看到了这样的SQL select   t.* ...

  9. ORACLE中使用DBMS_RANDOM去产生随机数

    一.生成随机字符串:DBMS_RANDOM.STRING 用法:DBMS_RANDOM.STRING(选项, 返回字符串长度) 选项有如下几种可供选择:1)'u', 'U' - returning s ...

随机推荐

  1. bing词典

    一.bug寻找 bug1:点击单词挑战之后选择四级词汇,然后一直狂击答案,点到一个时候就会出现一个情况:不管点击哪一个选项都不会跳至下一题,而且屏幕上方的已做题目数 x/20中的x会乱跳. bug2: ...

  2. MySQL课堂练习 20162315

    练习内容 1.参考教材相关代码,提交能连接到world的截图(有学号水印) 2.查询world数据库,获得人口超过500万的所有城市的列表. 3.查询world数据库,获得New Jersey州所有城 ...

  3. AbstractFactory(PeopleSkin)

    使用抽象工厂模式,完成下述产品等级结构: 实现 UML类图 public class BlackFactory implements MWFactory{ public Man produceMan( ...

  4. “吃神么,买神么”的第一个Sprint计划(第五天)

    “吃神么,买神么”项目Sprint计划 ——5.25  星期一(第五天)立会内容与进度 摘要:logo2出来了,修改过不一样的风格,组内总体评价可以,但是颜色要改,色调没注意,统一决定改成与背景色一致 ...

  5. Alpha版本冲刺(八)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  6. H5页面的滚动条在windows浏览器下始终看到(灰色的不可用的)

    一般这种情况是在某些相关的div上设置了overflow:scroll属性,在mac系统的浏览器下均没有滚动条显示而在windows下的各个浏览器上均可以看到灰色的不可用的滚动条,这种情况我们需要在b ...

  7. 弹出提示框的方式——java

    1.显示一个错误对话框,该对话框显示的 message 为 'alert': JOptionPane.showMessageDialog(null, "alert", " ...

  8. Alpha阶段事后诸葛分析

    一.设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件主要是解决在宿舍中购买商品的软件,不同于淘宝等软件,本软件主要是用于学生开设的店铺及宿 ...

  9. 笔记之分布式文件系统(DFS)

    不知何故,老外都挺喜欢使用DFS,但是国内公司用这个的不多.一个具体的需求就是,备份服务器在国外,所以启用DFS把国内的数据同步一份到国外进行备份.最近有机会接触DFS,把一些心得体会记录一下. 1. ...

  10. macOS how to install python3

    macOS how to install python3 macOS & Python 3.7.2 https://www.python.org/downloads/mac-osx/ http ...