127 DBMS_RANDOM

DBMS_RANDOMパッケージは、組込み式の乱数ジェネレータを提供します。DBMS_RANDOMは暗号化に使用するものではありません。

この章のトピックは、次のとおりです:

127.1 DBMS_RANDOMの推奨されないサブプログラム

Oracle Database 11gでは、次のサブプログラムの使用は推奨されていません。新しいアプリケーションでは、推奨されないプロシージャは使用しないことをお薦めします。推奨されない機能は、下位互換性を維持する目的のみでサポートされています。

127.2 DBMS_RANDOMのセキュリティ・モデル

このパッケージは、SYSとしてインストールする必要があります。デフォルトでは、このパッケージは、現行のユーザー名、秒数まで示した現在の時間および現行セッションで初期化されます。このパッケージを実行する必要があるユーザーには、明示的にEXECUTE権限を付与し、PUBLIC EXECUTE権限に依存しないことをお薦めします。

127.3 DBMS_RANDOMの使用上の注意

DBMS_RANDOMには、次の使用上の注意が適用されます。

  • DBMS_RANDOM.RANDOMは、[-2^^31, 2^^31)の整数を生成します。

  • DBMS_RANDOM.VALUEは[0,1)の数を生成し、精度は38桁です。

DBMS_RANDOMは明示的に初期化できますが、乱数ジェネレータをコールする前に初期化する必要はありません。明示的な初期化が行われない場合は、日付、ユーザーIDおよびプロセスIDで自動的に初期化されます。

このパッケージを、同じシードを使用して2回シードしてから同じ方法でアクセスした場合、2回とも同じ結果が生成されます。

テストなどのように、すべての実行で乱数の順序が同じになる必要のある場合があります。その場合は、DBMS_RANDOM.SEEDのオーバーロードの1つをコールして、ジェネレータを定数値でシードします。各実行時の出力を変える場合は、単にシードのコールを省略して、システムによって適切なシードが選択されるようにします。

127.4 DBMS_RANDOMサブプログラムの要約

この表は、DBMS_RANDOMサブプログラムを示し、簡単に説明しています。

表127-1 DBMS_RANDOMパッケージのサブプログラム

サブプログラム 説明

INITIALIZEプロシージャ

シード値を使用して、パッケージを初期化します。

NORMALファンクション

正規分布の乱数を戻します。

RANDOMファンクション

乱数を生成します。

SEEDプロシージャ

シードをリセットします

STRINGファンクション

ランダム文字列を取得します。

TERMINATEプロシージャ

パッケージを終了します

VALUEファンクション

0以上1未満で小数点以下38桁(精度38桁)の乱数を取得します。このファンクションがオーバーロードされると、ランダムなOracleの数値xを取得します。このxはlow以上high未満です。

127.4.1 INITIALIZEプロシージャ

この非推奨のプロシージャはジェネレータを初期化します。

注意:

リリース11gR1では、このプロシージャの使用は推奨されていません。現在はサポートされていますが、使用しないことをお薦めします。

構文

DBMS_RANDOM.INITIALIZE (
   val  IN  BINARY_INTEGER);

プラグマ

PRAGMA restrict_references (initialize, WNDS);

パラメータ

表127-2 INITIALIZEプロシージャのパラメータ

パラメータ 説明

val

乱数の生成に使用するシード番号。

使用上の注意

このプロシージャはSEEDプロシージャのコールのみを行うもので、今後サポートされません。

127.4.2 NORMALファンクション

このファンクションは、標準正規分布の乱数を戻します。

構文

DBMS_RANDOM.NORMAL
  RETURN NUMBER;

プラグマ

PRAGMA restrict_references (normal, WNDS);

戻り値

表127-3 NORMALファンクションのパラメータ

パラメータ 説明

number

乱数を戻します。

127.4.3 RANDOMファンクション

この推奨されないプロシージャは乱数を生成します。

注意:

リリース11gR1では、このファンクションの使用は推奨されていません。現在はサポートされていますが、使用しないことをお薦めします。

構文

DBMS_RANDOM.RANDOM
   RETURN binary_integer;

プラグマ

PRAGMA restrict_references (random, WNDS);

戻り値

127-4 RANDOMファンクションのパラメータ

パラメータ 説明

binary_integer

-2の31乗以上2の31乗未満の整数の乱数を戻します。

127.4.4 SEEDプロシージャ

このプロシージャは、シードをリセットします。

構文

DBMS_RANDOM.SEED (
   val  IN  BINARY_INTEGER);

DBMS_RANDOM.SEED (
   val  IN  VARCHAR2);

プラグマ

PRAGMA restrict_references (seed, WNDS);

パラメータ

表127-5 SEEDプロシージャのパラメータ

パラメータ 説明

val

乱数の生成に使用するシード番号または文字列。

使用上の注意

シードには2000までの長さの文字列を使用できます。

127.4.5 STRINGファンクション

このファンクションは、ランダム文字列を取得します。

構文

DBMS_RANDOM.STRING
   opt  IN  CHAR,
   len  IN  NUMBER)
  RETURN VARCHAR2;

プラグマ

PRAGMA restrict_references (string, WNDS);

パラメータ

表127-6 STRINGファンクションのパラメータ

パラメータ 説明

opt

戻される文字列の表示方法を指定します。

  • 'u'、'U' - 大文字のアルファベット文字で文字列を戻します。

  • 'l'、'L' - 小文字のアルファベット文字で文字列を戻します。

  • 'a'、'A' - 大/小文字が混在したアルファベット文字で文字列を戻します。

  • 'x'、'X' - 大文字のアルファベット文字と数字で文字列を戻します。

  • 'p'、'P' - 印刷可能な任意の文字で文字列を戻します。

これ以外の場合、戻される文字列は大文字のアルファベット文字になります。

len

戻される文字列の長さ。

戻り値

表127-7 STRINGファンクションの戻り値

パラメータ 説明

VARCHAR2

VARCHAR2を戻します

127.4.6 TERMINATEプロシージャ

パッケージを終了するときは、TERMINATEプロシージャをコールします。

注意:

リリース11gR1では、このプロシージャの使用は推奨されていません。現在はサポートされていますが、使用しないことをお薦めします。

構文

DBMS_RANDOM.TERMINATE;

127.4.7 VALUEファンクション

基本のファンクションによって、0以上1未満で、小数点以下が38桁(精度38桁)の乱数が取得されます。あるいは、ランダムなOracleの数値xを取得できます(このxはlow以上high未満です)。

構文

DBMS_RANDOM.VALUE
  RETURN NUMBER;

DBMS_RANDOM.VALUE(
  low  IN  NUMBER,
  high IN  NUMBER)
RETURN NUMBER;

パラメータ

表127-8 VALUEファンクションのパラメータ

パラメータ 説明

low

乱数を生成する範囲の最小値(この値を含む)。生成される数値はlowと等しい場合があります。

high

乱数を生成する範囲の最大値(この値を含まない)。生成される数値はhighよりも小さくなります。

戻り値

127-9 VALUEファンクションの戻り値

パラメータ 説明

NUMBER

Oracleの数値を戻します。