dbms_random.seed

语法:

DBMS_RANDOM.SEED (
   val  IN  BINARY_INTEGER);

DBMS_RANDOM.SEED (
   val  IN  VARCHAR2);

  

val:

Seed number or string used to generate a random number

 

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

如果不指定随机数参数的种子,oracle将会使用当前时间,用户id,进程id号来生成种子。如果指定的种子相同将会生成相同的随机数(随机数是种子通过复杂的运算得到的,并不是真正的随机)。

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

会话1:

SQL> select userenv(‘sessionid‘) from dual;

USERENV(‘SESSIONID‘)
--------------------
          4294967295

SQL> begin
  2  	dbms_random.seed(100);
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> select dbms_random.value from dual connect by level < 10;

     VALUE
----------
  .5380177
.674995365
.653622701
 .76351985
.298598349
 .40522032
.995516369
.395655808
.180747605

9 rows selected.

SQL>

  

会话2:

SQL> select userenv(‘sessionid‘) from dual;

USERENV(‘SESSIONID‘)
--------------------
          4294967295

SQL> begin
  2  dbms_random.seed(100);
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> select dbms_random.value from dual connect by level < 10;

     VALUE
----------
  .5380177
.674995365
.653622701
 .76351985
.298598349
 .40522032
.995516369
.395655808
.180747605

9 rows selected.

SQL>

  

 

时间: 2024-10-20 19:12:41

dbms_random.seed的相关文章

Oracle dbms_random随机数包详解

Oracle dbms_random包主要用于获得随机数,可以为数字也可以为字母等,还可以实现混拼.常用函数如下: dbms_random.value 生成一个指定范围的38位随机小数(小数点后38位),若不指定范围则默认为范围为[0,1)的随机数. Oracle的官方说明为:The VALUE function produces numbers in the range [0,1) with 38 digits of precision. [举例] 生成一个0~1间的随机小数(包括0,不包括1

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

dbms_random是一个可以生成随机数值或者字符串的程序包. 这个包有initialize().seed().terminate().value().normal().random().string()等几个函数,但value()是最常用的,下面依次介绍各个函数的详细用法: 1.dbms_random.value方法 第一种:FUNCTION value RETURN NUMBER; 说明: 这种用法没有参数,会返回一个具有38位精度的数值,范围从0.0到1.0,但不包括1.0. 示例: S

Oracle之DBMS_RANDOM包详解

DBMS_RANDOM是Oracle提供的一个PL/SQL包,用于生成随机数据和字符.它具有以下函数. 其中,initialize,random,terminate函数在Oracle11g中已不推荐使用,主要用于向后兼容.下面对各个函数进行举例说明 1. INITIALIZE 用一个种子值来初始化DBMS_RANDOM包. 默认情况下,DBMS_RANDOM包是根据用户.时间.会话来进行初始化,这样,即便是同一个语句,每次生成的数值都会不一样,但这样会产生一个问题,在测试环境下,如果我想每次生成

oracle使用DBMS_RANDOM包生成随机数据

(一)DBMS_RANDOM包信息 DBMS_RANDOM包包含3个存储过程,4个函数,1个类型,一共8个模块,如下. SQL> desc dbms_random Element Type ---------- --------- VALUE FUNCTION NORMAL FUNCTION STRING FUNCTION RANDOM FUNCTION INITIALIZE PROCEDURE SEED PROCEDURE TERMINATE PROCEDURE NUM_ARRAY TYPE

oracle 表连接 - hash join 哈希连接

一. hash 连接(哈希连接)原理 指的是两个表连接时, 先利用两表中记录较少的表在内存中建立 hash 表, 然后扫描记录较多的表并探測 hash 表, 找出与 hash 表相匹配的行来得到结果集的表连接方法. 哈希连接仅仅能用于等值连接条件(=). 如果以下的 sql 语句中表 T1 和 T2 的连接方式是哈希连接, T1 是驱动表 select * from T1, T2 where T1.id = T2.id and T1.name = 'David'; oracle 运行过程例如以下

SQL Tuning 基础概述06 - 表的连接方式:Nested Loops Join,Merge Sort Join &amp; Hash Join

nested loops join 嵌套循环 merge sort join 排序合并 hash join 哈希连接 nested loops join(嵌套循环)   驱动表返回几条结果集,被驱动表访问多少次,有驱动顺序,无须排序,无任何限制. 驱动表限制条件有索引,被驱动表连接条件有索引. hints:use_nl() merge sort join(排序合并)   驱动表和被驱动表都是最多访问1次,无驱动顺序,需要排序(SORT_AREA_SIZE),连接条件是<>或like导致无法使用

Oracle事务原理探究2--读书笔记五

续上篇... 3.  数据块访问与undo 任何时候当会话查看一个数据块的时候,都需要保证看到的是适当的数据版本.从外部观点来看,这意味着会话不应该看到任何未提交的数据,或许还不应该看到查询开始后修改并提交的数据(取决于事务的隔离级别),这称为数据的读一致性版本. 下面我们来谈谈oracle怎么实现读一致性版本的: 3.1 设置场景 我们会创建一张表,里面插入3条数据,然后开几个会话对其进行操作 3.1.1 连接oracle,以任何一个用户登录即可,初始化一些格式 execute dbms_ra

oracle表连接之----〉嵌套循环(Nested Loops Join)

嵌套循环连接(Nested Loops Join)是一种两个表在做表连接时依靠两层嵌套循环(分别为外层循环和内存循环)来得到连接结果集的表连接方法.即外层循环对应的驱动结果集有多少条记录,遍历被驱动表的内层循环就要做多少次,这就是所谓的"嵌套循环"的含义. 对于嵌套循环连接的优缺点及适用场景如下: a,如果驱动表所对应的驱动结果集的记录数较少,同时在被驱动表的连接列上又存在唯一性索引(或者在被驱动表的连接列上存在选择性好的非唯一性索引),那么此时使用嵌套循环连接的执行效率就会非常高:但

oracle 表连接 - sort merge joins 排序合并连接

一. sort merge joins连接(排序合并连接) 原理 指的是两个表连接时, 通过连接列先分别排序后, 再通过合并操作来得到最后返回的结果集的方法. 假如表 T1 和 T2 的连接方式是排序合并连接, oracle 执行步骤如下: (1) 根据 sql 语句中的谓词条件(如果有) 访问 T1 表, 得到一个过滤的结果集, 然后按照 T1 中的连接列对结果集进行排序 (2) 根据 sql 语句中的谓词条件(如果有) 访问 T2 表, 得到一个过滤的结果集, 然后按照 T2 中的连接列对结