`
qimo601
  • 浏览: 3439416 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Oracle随机函数

阅读更多

 dbms_random 

 

CREATE OR REPLACE PACKAGE SYS.dbms_random AS

 

    ------------

    --  OVERVIEW

    --

    --  This package should be installed as SYS.  It generates a sequence of

    --  random 38-digit Oracle numbers.  The expected length of the sequence

    --  is about power(10,28), which is hopefully long enough.

    --

    --------

    --  USAGE

    --

    --  This is a random number generator.  Do not use for cryptography.

    --  For more options the cryptographic toolkit should be used.

    --

    --  By default, the package is initialized with the current user

    --  name, current time down to the second, and the current session.

    --

    --  If this package is seeded twice with the same seed, then accessed

    --  in the same way, it will produce the same results in both cases.

    --

    --------

    --  EXAMPLES

    --

    --  To initialize or reset the generator, call the seed procedure as in:

    --      execute dbms_random.seed(12345678);

    --    or

    --      execute dbms_random.seed(TO_CHAR(SYSDATE,'MM-DD-YYYY HH24:MI:SS'));

    --  To get the random number, simply call the function, e.g.

    --      my_random_number BINARY_INTEGER;

    --      my_random_number := dbms_random.random;

    --    or

    --      my_random_real NUMBER;

    --      my_random_real := dbms_random.value;

    --  To use in SQL statements:

    --      select dbms_random.value from dual;

    --      insert into a values (dbms_random.value);

    --      variable x NUMBER;

    --      execute :x := dbms_random.value;

    --      update a set a2=a2+1 where a1 < :x;

 

    -- Seed with a binary integer

    PROCEDURE seed(val IN BINARY_INTEGER );

    PRAGMA restrict_references (seed, WNDS );

 

    -- Seed with a string (up to length 2000)

    PROCEDURE seed(val IN VARCHAR2 );

    PRAGMA restrict_references (seed, WNDS );

 

    -- Get a random 38-digit precision number, 0.0 <= value < 1.0

    FUNCTION value RETURN NUMBER ;

    PRAGMA restrict_references ( value , WNDS );

 

    -- get a random Oracle number x, low <= x < high

    FUNCTION value (low IN NUMBER , high IN NUMBER ) RETURN NUMBER ;

    PRAGMA restrict_references ( value , WNDS );

 

    -- get a random number from a normal distribution

    FUNCTION normal RETURN NUMBER ;

    PRAGMA restrict_references (normal, WNDS );

 

    -- get a random string

    FUNCTION string (opt char , len NUMBER )

          /* "opt" specifies that the returned string may contain:

             'u','U'  :  upper case alpha characters only

             'l','L'  :  lower case alpha characters only

             'a','A'  :  alpha characters only (mixed case)

             'x','X'  :  any alpha-numeric characters (upper)

             'p','P'  :  any printable characters

          */

        RETURN VARCHAR2 ;  -- string of <len> characters (max 60)

    PRAGMA restrict_references ( string , WNDS );

 

    -- Obsolete, just calls seed(val)

    PROCEDURE initialize(val IN BINARY_INTEGER );

    PRAGMA restrict_references (initialize, WNDS );

 

    -- Obsolete, get integer in ( -power(2,31) <= random < power(2,31) )

    FUNCTION random RETURN BINARY_INTEGER ;

    PRAGMA restrict_references (random, WNDS );

 

    -- Obsolete, does nothing

    PROCEDURE terminate;

 

    TYPE num_array IS TABLE OF NUMBER INDEX BY BINARY_INTEGER ;

END dbms_random;

 

 

    简单得说,通过dbms_random调用随机数的方法大致有4种:

 

1、dbms_random.normal

 

    这个函数不带参数,能返回normal distribution的一个number类型,所以基本上随机数会在-1到1之间。

    简单测试了一下,产生100000次最大能到5左右:

 

    SQL> declare
      2    i number:=0;
      3    j number:=0;
      4  begin
      5    for k in 1 .. 100000 loop
      6    i:= dbms_random.normal;
      7      if i > j
      8        then j:=i;
      9      end if;
     10    end loop;
     11    dbms_output.put_line(j);
     12  end;
     13  /

 

    5.15325081797418404136433867107468983182
 
    PL/SQL procedure successfully completed

 

2、dbms_random.random

 

    这个也没有参数,返回一个从-power(2,31)到power(2,31)的整数值

 

3、dbms_random.value

 

    这个函数分为两种,一种是没有参数,则直接返回0-1之间的38位小数

 

    SQL > column value format 9.99999999999999999999999999999999999999
    SQL > select dbms_random.value from dual;

 

                                        VALUE
    -----------------------------------------
      .58983014999643548701631750396301271752

 

    第二种是加上两个参数a、b,则返回值在a、b之间的38位小数

 

margin: 0cm 0cm 0pt; t

分享到:
评论

相关推荐

    Oracle随机函数之dbms_random使用详解

    Oracle的DBMS_RANDOM是一个强大的包,它提供了多种用于生成随机数据的函数,广泛应用于测试、数据分析、模拟等场景。在Oracle数据库中,你可以利用这些函数来创建不可预测的数据,这对于测试应用程序或者填充测试...

    oracle 110个常用函数.zip

    9. 随机函数:DBMS_RANDOM.RANDOM()生成随机数,DBMS_RANDOM.VALUE()生成指定范围内的随机数。 10. 连接查询和嵌套查询中使用的函数,如CONNECT_BY_ROOT()和LEVEL用于层次查询,而子查询中可能用到的任何函数,如...

    Oracle统一社会信用代码自定义效验函数

    标签"Oracle 自定义函数"强调了这个函数是在Oracle环境中实现的,这意味着它必须遵循Oracle的语法和规范,且可以被其他Oracle SQL查询或PL/SQL程序调用。 从文件名"统一代码Oracle函数效验"我们可以推测,压缩包内...

    基于Oracle罚函数的自适应约束差分进化算法.pdf

    【Oracle罚函数】Oracle罚函数是一种在约束优化问题中广泛使用的数学工具,它通过引入一个惩罚项来处理约束条件的违反。在优化过程中,如果一个解违反了约束,Oracle罚函数会增加相应的惩罚,使得违反约束的解在目标...

    第三章 Oracle常用函数.pdf

    Oracle数据库系统是一个广泛使用的商业关系型数据库管理系统(RDBMS),它提供了多种内建的函数,以便于用户在进行数据查询、数据处理、以及数据转换等操作时能够更加便捷。本文档将详细介绍初学者在学习Oracle...

    Oracle里抽取随机数的多种方法

    在 Oracle 中抽取随机数是许多应用场景中常见的问题,例如在某个活动中需要随机取出一些符合条件的用户,以颁发获奖通知或其它消息。本文将通过实例讲解如何抽取随机数的多种方法。 首先,我们可以使用 Oracle 自带...

    Oracle 汉字拼音简码获取

    本文将详细介绍Oracle数据库中实现这一功能的方法,包括函数的结构、工作原理以及实际应用场景。 #### 函数结构与原理 给定的代码片段展示了如何在Oracle数据库中创建一个名为`ZLSPELLCODE`的函数,用于获取汉字...

    SQL Server和Oracle常用函数对比

    在数据库管理领域,SQL Server 和 ...这些函数在 SQL Server 和 Oracle 中的差异主要体现在语法和命名上,但功能基本一致,使得在两个系统之间进行数据迁移或查询时,开发人员需要了解这些差异以便进行相应的转换。

    Oracle随机启动

    ### Oracle随机启动知识点详解 #### 一、Oracle随机启动概述 在Linux环境下,为了实现Oracle数据库服务能够在系统启动时自动启动,通常会采用特定的方法来配置。本篇将重点介绍如何通过修改`/etc/oratab`文件以及...

    oracle常用函数

    Oracle提供了`DBMS_RANDOM.VALUE(0,1)`生成0到1之间的随机浮点数。 13. **取符号**: `SIGN(-8)`函数返回-1,表示负数;对于正数返回1,对于0返回0。 14. **圆周率**: Oracle中没有内置的PI函数,但可以使用`...

    Oracle插入随机数

    在Oracle数据库管理中,有时我们需要向数据库表中插入大量的随机数据来进行测试、演示或者数据模拟分析等工作。本篇文章将详细介绍如何利用自定义的Oracle函数来实现这一功能。 #### 自定义Oracle函数 为了实现向...

    Oracle里取随机数的几种具体的方法

    除了使用 DBMS_RANDOM 包外,还有其他方法可以生成随机数,例如使用 Oracle 的内置函数、使用 PL/SQL 语言等。这些方法可以根据实际情况选择。 Oracle 提供了多种方法来生成随机数,每种方法都有其优缺点,选择合适...

    Oracle OCP 考试模拟器

    模拟器的特点在于它能够随机出题,这意味着每次练习时的题目顺序和选项都会有所不同,这种设计有助于考生在不同的环境下检验自己的理解和应变能力。用户需要手动添加考题和答案,这既是学习过程的一部分,也使得用户...

    SQLServer和Oracle的常用函数对比.docx

    在SQL Server和Oracle数据库系统中,函数是进行数据操作和计算的重要工具。下面将详细对比这两者中的一些常用函数。 1. **绝对值** - SQL Server: `ABS(-1)` 返回-1的绝对值,即1。 - Oracle: `ABS(-1)` 与SQL ...

    Oracle字符集id,16位id以及name

    ID ID(Hex) Name ID ID(Hex) Name ID ID(Hex) Name 1 0001 US7ASCII 2 0002 WE8DEC 3 0003 WE8HP 4 0004 US8PC437 5 0005 WE8EBCDIC37 6 0006 WE8EBCDIC500 7 0007 WE8EBCDIC1140 8 0008 WE8EBCDIC285 9 0009

    利用ORACLE实现数据的抽样

    本文将深入探讨如何在Oracle数据库环境下实现数据抽样,具体涵盖简单随机抽样、系统抽样、整群抽样以及分层抽样四种常见抽样方法,并详细解析Oracle特有的抽样功能。 ### 一、抽样方法概览 #### 1. 简单随机抽样 ...

    Oracle中如何用一条SQL快速生成10万条测试数据

    `dbms_random`是Oracle提供的包,包含了一系列随机数生成函数,`value`函数可以生成指定范围内的随机数。通过`trunc`函数,我们可以将其转换为整数。 #### 4. **随机字符串生成** `dbms_random.string('x',20)`...

Global site tag (gtag.js) - Google Analytics