ヘッダーをスキップ
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス
11g リリース1(11.1)
E05686-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

112 DBMS_RULE

DBMS_RULEパッケージには、指定されたイベントに対してルール・セットの評価を可能にするサブプログラムが含まれています。


関連項目:


この章では、次の項目について説明します。


DBMS_RULEの使用方法

この項では、DBMS_RULEパッケージの使用に関連する項目について説明します。


セキュリティ・モデル

PUBLICには、このパッケージのEXECUTE権限が付与されます。


DBMS_RULEサブプログラムの要約

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

サブプログラム 説明

CLOSE_ITERATORプロシージャ


オープンしているイテレータをクローズします。

EVALUATEプロシージャ


指定した評価コンテキストを使用している指定ルール・セット内のルールを評価します。

GET_NEXT_HITファンクション


TRUEに評価された次のルールをTRUEルールのイテレータから戻します。または、MAYBEに評価された次のルールをMAYBEルールのイテレータから戻します。TRUEに評価されたルールおよびMAYBEに評価されたルールが両方ともない場合は、NULLを戻します。



CLOSE_ITERATORプロシージャ

このプロシージャは、オープンしているイテレータをクローズします。

構文

DBMS_RULE.CLOSE_ITERATOR(
  iterator  IN  BINARY_INTEGER);

パラメータ

表112-2 CLOSE_ITERATORプロシージャのパラメータ

パラメータ 説明

iterator

クローズされるイテレータ。


使用上の注意

このプロシージャには、同じセッションでこのプロシージャより前のDBMS_RULE.EVALUATEコールで戻された、オープン状態のイテレータが必要です。ただし、このプロシージャを実行するユーザーには、評価されるルール・セットに対する権限は必要ありません。

イテレータをクローズすると、そのイテレータに関連するメモリーなどのリソースが解放されます。そのため、不要になったイテレータはクローズすることをお薦めします。


EVALUATEプロシージャ

このプロシージャは、指定したイベントに対して指定された評価コンテキストを使用する指定ルール・セット内のルールを評価します。

このプロシージャはオーバーロードされています。 true_rulesパラメータおよびmaybe_rulesパラメータは、true_rules_iteratorパラメータおよびmaybe_rules_iteratorパラメータと相互に排他的です。 また、true_rulesパラメータとmaybe_rulesパラメータを持つプロシージャにはstop_on_first_hitパラメータがありますが、それ以外のプロシージャにはありません。

構文

DBMS_RULE.EVALUATE(
  rule_set_name        IN   VARCHAR2,
  evaluation_context   IN   VARCHAR2,
  event_context        IN   SYS.RE$NV_LIST               DEFAULT NULL,
  table_values         IN   SYS.RE$TABLE_VALUE_LIST      DEFAULT NULL,
  column_values        IN   SYS.RE$COLUMN_VALUE_LIST     DEFAULT NULL,
  variable_values      IN   SYS.RE$VARIABLE_VALUE_LIST   DEFAULT NULL,
  attribute_values     IN   SYS.RE$ATTRIBUTE_VALUE_LIST  DEFAULT NULL,
  stop_on_first_hit    IN   BOOLEAN                      DEFAULT FALSE,
  simple_rules_only    IN   BOOLEAN                      DEFAULT FALSE,
  true_rules           OUT  SYS.RE$RULE_HIT_LIST,
  maybe_rules          OUT  SYS.RE$RULE_HIT_LIST);

DBMS_RULE.EVALUATE(
  rule_set_name         IN   VARCHAR2,
  evaluation_context    IN   VARCHAR2,
  event_context         IN   SYS.RE$NV_LIST               DEFAULT NULL,
  table_values          IN   SYS.RE$TABLE_VALUE_LIST      DEFAULT NULL,
  column_values         IN   SYS.RE$COLUMN_VALUE_LIST     DEFAULT NULL,
  variable_values       IN   SYS.RE$VARIABLE_VALUE_LIST   DEFAULT NULL,
  attribute_values      IN   SYS.RE$ATTRIBUTE_VALUE_LIST  DEFAULT NULL,
  simple_rules_only     IN   BOOLEAN                      DEFAULT FALSE,
  true_rules_iterator   OUT  BINARY_INTEGER,
  maybe_rules_iterator  OUT  BINARY_INTEGER);

パラメータ

表112-3 EVALUATEプロシージャのパラメータ

パラメータ 説明

rule_set_name

ルール・セット名。[schema_name.]rule_set_nameの形式で指定します。 たとえば、hrスキーマのhr_rulesという名前のルール・セットにあるルールすべてを評価するには、このパラメータにhr.hr_rulesを入力します。スキーマが未指定の場合は、現行のユーザーのスキーマが使用されます。

evaluation_context

評価コンテキスト名。[schema_name.]evaluation_context_nameの形式で指定します。スキーマが未指定の場合は、現行のユーザーの名前が使用されます。

評価されるのは、指定した評価コンテキストを使用しているルールのみです。

event_context

評価の原因となるイベントを識別する名前/値ペアのリスト。

table_values

評価コンテキストの作成時に指定された表の別名を使用した、表の行のデータ。表の別名は、リスト内で一意になるようにしてください。

column_values

表の行の部分データ。 値がtable_valuesですでに指定されている表には、列値を指定しないでください。

variable_values

変数のデータを含むリスト。

明示的な変数値を認識する唯一の方法は、その値をこのリストに指定することです。

暗黙的な変数値がリストに指定されていない場合は、暗黙的な変数の値を取得するためのファンクションが起動されます。暗黙的な変数値がリストに指定されている場合は、この値が使用され、ファンクションは起動されません。

attribute_values

変数の部分データ。 値がvariable_valuesですでに指定されている変数の属性値は指定しないでください。

stop_on_first_hit

TRUEの場合、ルール・エンジンは、TRUEルールを検出次第、評価を停止します。

TRUEを指定して、TRUEルールがない場合、ルール・エンジンは、指定データの多くをTRUEに評価できるルールが見つかり次第、評価を停止します。

FALSEの場合、ルール・エンジンは、TRUEルールの検出後も、ルールの評価を続行します。

simple_rules_only

TRUEの場合は、迅速に評価できる単純な(SQLを使用しない)ルールのみが、評価の対象となります。

FALSEの場合は、すべてのルールが評価されます。

true_rules

EVALUATEプロシージャの出力をRE$RULE_HIT_LISTタイプの配列で受け取ります。

TRUEに評価されるルールがない場合、true_rulesは空です。

少なくとも1つのルールがTRUEに評価され、stop_on_first_hitTRUEの場合、true_rulesには、TRUEに評価された1つのルールが含まれます。

stop_on_first_hitFALSEの場合、true_rulesには、TRUEに評価されたすべてのルールが含まれます。

maybe_rules

すべてのルールが、追加データの必要もなく、完全に評価できる場合、maybe_rulesは空です。

stop_on_first_hitTRUEの状態で、指定データの多くをTRUEに評価できるルールが少なくとも1つあり、TRUEに評価されるルールがない場合、maybe_rulesには、TRUEに評価できるルールが1つ含まれます。

stop_on_first_hitFALSEの場合、maybe_rulesには、指定データの多くをTRUEに評価できるすべてのルールが含まれます。

true_rules_iterator

TRUEのルールにアクセスするイテレータが含まれます。

maybe_rules_iterator

追加データやSQL発行をTRUEにできるルールにアクセスするイテレータが含まれます。


使用上の注意


注意:

指定したルールとは異なる評価コンテキストを使用しているルール・セット内のルールは、評価の対象になりません。

ルール・セット内のルールは、table_valuescolumn_valuesvariable_valuesおよびattribute_valuesに指定されているデータを使用して評価されます。これらの値は、指定した評価コンテキストの表および変数を参照する必要があります。そうでない場合は、エラーが発生します。

コール元は、stop_on_first_hitを使用して、最初のTRUEルールまたは最初のMAYBEルール(TRUEルールがない場合)の検出直後に評価を停止するかどうかを指定できます。

また、コール元は、simple_rules_onlyを使用して、迅速に評価できる単純な(SQLを使用しない)ルールのみを評価対象とするかどうかも指定できます。この指定で、評価は迅速化されますが、SQLなしでは評価できないルールは、MAYBEルールとして戻されます。

部分評価はサポートされています。EVALUATEプロシージャは、一部の表、列、変数または属性に関するデータによってのみコールできます。この場合、ルール内の1つ以上の単純な式の値に基づいてもTRUEまたはFALSEの判断ができないかぎり、データ不足が原因で評価できないルールはMAYBEルールとして戻されます。たとえば、変数「x」の属性「a.b」1の値を指定すると、表「tab」の値を指定しなくても、次のルール条件のルールがTRUEで戻ります。

(:x.a.b = 1) or (tab.c > 10)

評価の結果には、次の2種類があります。

コール元は、イベントに対してプロシージャがTRUEおよびMAYBEに評価されるすべてのルールを戻すか、TRUEおよびMAYBEに評価されるルールのイテレータを戻すかを指定できます。TRUEルールのイテレータの場合、クライアントはTRUEに評価されるルールを1回に1つずつフェッチできます。MAYBEルールのイテレータの場合、クライアントはMAYBEに評価されるルールを1回に1つずつフェッチできます。

イテレータを使用する場合は、DBMS_RULEパッケージのGET_NEXT_HITファンクションを使用して、TRUEまたはMAYBEに評価される次のルールをイテレータから取得します。イテレータが不要になった場合は、そのイテレータが使用していたメモリーなどのリソースを解放するため、イテレータをクローズすることをお薦めします。次の方法で、イテレータをクローズできます。

DBMS_RULE.EVALUATEプロシージャを実行するユーザーは、次の要件を最低1つ満たす必要があります。


GET_NEXT_HITファンクション

このファンクションは、TRUEに評価された次のルールをTRUEルールのイテレータから戻します。または、MAYBEに評価された次のルールをMAYBEルールのイテレータから戻します。TRUEまたはMAYBEに評価されるルールがすでに存在しない場合、ファンクションはNULLを戻します。

構文

DBMS_RULE.GET_NEXT_HIT(
  iterator  IN  BINARY_INTEGER)
RETURN SYS.RE$RULE_HIT;

パラメータ

表112-4 GET_NEXT_HITファンクションのパラメータ

パラメータ 説明

iterator

TRUEまたはMAYBEに評価されたルールが取得されるイテレータ。


使用上の注意

このプロシージャには、同じセッションでこのプロシージャより前のDBMS_RULE.EVALUATEコールで戻された、オープン状態のイテレータが必要です。ただし、このプロシージャを実行するユーザーには、評価されるルール・セットに対する権限は必要ありません。

イテレータは、NULLを戻すと自動的にクローズします。 オープンしているイテレータが不要になった場合は、DBMS_RULEパッケージのCLOSE_ITERATORプロシージャを使用してクローズしてください。


注意:

イテレータを戻したDBMS_RULE.EVALUATEプロシージャをコールした後で、評価されるルール・セットが変更された場合、このファンクションを使用するとエラーになります。ルール・セットの変更には、ルール・セットへのルールの追加、ルール・セット内の既存ルールの変更、ルール・セットからのルールの削除、ルール・セットの削除などがあります。


関連項目: