ORACLE乱数DBMS_RANDOMパッケージ
簡単に言えば、dbms_を通じてランダムな数を出す方法は大体4つあります。
1、dbms_randdom.normal
この関数はパラメータを持たずにnormal distributionのnumberタイプを返しますので、基本的に乱数は-1から1の間にあります。
簡単なテストをしましたが、100000回が発生しました。最大5ぐらいまでです。
Sqlコード
PL/SQL procedure success fully completted
2、dbms_ランドm.ラドドm
これもパラメータがなく、-パワー(2,31)からパワー(2,31)までの整数値を返します。
3、dbms_ランドm.value
この関数は二つに分けられています。一つはパラメータがない場合、直接返します。
trunc()関数で整理できます。
4、dbms_ラドm.string
この関数には二つのパラメータが必要です。前の文字はタイプを指定し、後の数値は桁数を指定します。(最大60)
タイプの説明:
seedを設定して乱数の開始点を決定できます。同じseedに対して乱数の任意の変化は決定されます。
つまり、いつかseedを呼び出したら、その後初めて発生する乱数は4、2回目は6、3回目は1です。同じseedを再度呼び出した後、一回に発生する乱数は4、6、1です。
seedには二つの種類があります。一つは数値型のもので、一つは文字型(最大長2000)のものです。
integerのパラメータは、説明がはっきりしています。
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.1532508179741844643386710788983182PL/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乱数を勉強するのに役立ちます。