ORACLE乱数DBMS_RANDOMパッケージ


簡単に言えば、dbms_を通じてランダムな数を出す方法は大体4つあります。
1、dbms_randdom.normal
    この関数はパラメータを持たずにnormal distributionのnumberタイプを返しますので、基本的に乱数は-1から1の間にあります。
    簡単なテストをしましたが、100000回が発生しました。最大5ぐらいまでです。
Sqlコード

 declare 
  i number:=;  
  j number:=;  
 begin 
  for k in .. loop  
  i:= dbms_random.normal;  
   if i > j  
    then j:=i;  
   end if;  
  end loop;  
  dbms_output.put_line(j);  
 end; 
    5.1532508179741844643386710788983182
    PL/SQL procedure success fully completted
2、dbms_ランドm.ラドドm
    これもパラメータがなく、-パワー(2,31)からパワー(2,31)までの整数値を返します。
3、dbms_ランドm.value
    この関数は二つに分けられています。一つはパラメータがない場合、直接返します。

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

                    VALUE
  -----------------------------------------
   .58983014999643548701631750396301271752
    二つ目は2つのパラメータa、bを加えると、戻り値は>=a and SQL > column value format 999.999999999999999999999999999999999999 SQL > select dbms_random.value(100,500) value from dual; VALUE ----------------------------------------- 412.150194612502916808701157054098274240    注意:前の何桁に関わらず、小数点以下は38桁です。
trunc()関数で整理できます。
4、dbms_ラドm.string
    この関数には二つのパラメータが必要です。前の文字はタイプを指定し、後の数値は桁数を指定します。(最大60)
    タイプの説明:

  '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

  SQL > column value format a30
  SQL > select dbms_random.string('u',30) value from dual;
  VALUE
  ------------------------------
  VTQNLGISELPXEDBXKUZLXKBAJMUTIA

  SQL > select dbms_random.string('l',30) value from dual;
  VALUE
  ------------------------------
  uqygsbquingfqdytpgjvdoblxeglgu

  SQL > select dbms_random.string('a',30) value from dual;
  VALUE
  ------------------------------
  NGTGkQypuSWhBfcrHiOlQwOUXkqJjy

  SQL > select dbms_random.string('x',30) value from dual;
  VALUE
  ------------------------------
  UVWONYJMXT31VEFPD736WJCJ5QT6BD

  SQL > select dbms_random.string('p',30) value from dual;
  VALUE
  ------------------------------
  :mak$(WT4M_7c/+f[_XUscf$P Zcq{

5、seedについて
    seedを設定して乱数の開始点を決定できます。同じseedに対して乱数の任意の変化は決定されます。
    つまり、いつかseedを呼び出したら、その後初めて発生する乱数は4、2回目は6、3回目は1です。同じseedを再度呼び出した後、一回に発生する乱数は4、6、1です。
    seedには二つの種類があります。一つは数値型のもので、一つは文字型(最大長2000)のものです。

  -- 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 );
6、initializeについて
    integerのパラメータは、説明がはっきりしています。

 -- Obsolete, just calls seed(val)
  PROCEDURE initialize(val IN BINARY_INTEGER );
  PRAGMA restrict_references (initialize, WNDS );
ここで紹介するORACLEの乱数DBMS_RANDOMバッグはここまでです。oracle乱数を勉強するのに役立ちます。