DBMS_RULEパッケージには、指定されたイベントに対してルール・セットの評価を可能にするサブプログラムが含まれています。
|
関連項目:
|
この章では、次の項目について説明します。
セキュリティ・モデル
この項では、DBMS_RULEパッケージの使用に関連する項目について説明します。
PUBLICには、このパッケージのEXECUTE権限が付与されます。
表112-1 DBMS_RULEパッケージのサブプログラム
| サブプログラム | 説明 |
|---|---|
|
|
オープンしているイテレータをクローズします。 |
|
|
指定した評価コンテキストを使用している指定ルール・セット内のルールを評価します。 |
|
|
|
このプロシージャは、オープンしているイテレータをクローズします。
構文
DBMS_RULE.CLOSE_ITERATOR( iterator IN BINARY_INTEGER);
パラメータ
使用上の注意
このプロシージャには、同じセッションでこのプロシージャより前のDBMS_RULE.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プロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ルール・セット名。 |
|
|
評価コンテキスト名。 評価されるのは、指定した評価コンテキストを使用しているルールのみです。 |
|
|
評価の原因となるイベントを識別する名前/値ペアのリスト。 |
|
|
評価コンテキストの作成時に指定された表の別名を使用した、表の行のデータ。表の別名は、リスト内で一意になるようにしてください。 |
|
|
表の行の部分データ。 値が |
|
|
変数のデータを含むリスト。 明示的な変数値を認識する唯一の方法は、その値をこのリストに指定することです。 暗黙的な変数値がリストに指定されていない場合は、暗黙的な変数の値を取得するためのファンクションが起動されます。暗黙的な変数値がリストに指定されている場合は、この値が使用され、ファンクションは起動されません。 |
|
|
変数の部分データ。 値が |
|
|
|
|
|
|
|
|
少なくとも1つのルールが
|
|
|
すべてのルールが、追加データの必要もなく、完全に評価できる場合、
|
|
|
|
|
|
追加データやSQL発行を |
使用上の注意
|
注意: 指定したルールとは異なる評価コンテキストを使用しているルール・セット内のルールは、評価の対象になりません。 |
ルール・セット内のルールは、table_values、column_values、variable_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ルール。指定したデータに基づいてTRUEに評価されたルールのリストです。 このルールが戻されるのは、TRUEに評価されるすべてのルールを戻すOUTパラメータtrue_rules、またはTRUEに評価されるルールを1回に1つずつ戻すOUTパラメータtrue_rules_iteratorのいずれかです。
MAYBEルール。次の理由の1つのために評価できなかったルールのリストです。
ルールが使用不可のデータを参照しているため。たとえば、変数の属性"x.a.b"は指定されているが、変数「x」、属性「a」または属性「a.b」には値が指定されていない場合がこれに該当します。
ルールが、(SQLなしで)迅速に評価できるほど単純ではなく、simple_rules_onlyがTRUEに指定されているため。または、部分データを使用できるため。
MAYBEルールが戻されるのは、MAYBEに評価されるすべてのルールを戻すOUTパラメータmaybe_rules、またはMAYBEに評価されるルールを1回に1つずつ戻すOUTパラメータmaybe_rules_iteratorのいずれかです。
コール元は、イベントに対してプロシージャがTRUEおよびMAYBEに評価されるすべてのルールを戻すか、TRUEおよびMAYBEに評価されるルールのイテレータを戻すかを指定できます。TRUEルールのイテレータの場合、クライアントはTRUEに評価されるルールを1回に1つずつフェッチできます。MAYBEルールのイテレータの場合、クライアントはMAYBEに評価されるルールを1回に1つずつフェッチできます。
イテレータを使用する場合は、DBMS_RULEパッケージのGET_NEXT_HITファンクションを使用して、TRUEまたはMAYBEに評価される次のルールをイテレータから取得します。イテレータが不要になった場合は、そのイテレータが使用していたメモリーなどのリソースを解放するため、イテレータをクローズすることをお薦めします。次の方法で、イテレータをクローズできます。
DBMS_RULEパッケージのCLOSE_ITERATORプロシージャを、イテレータを指定して実行します。
TRUEまたはMAYBEに評価されるルールがすでに存在しないため、イテレータはNULLを戻します。
イテレータを実行しているセッションが終了します。
DBMS_RULE.EVALUATEプロシージャを実行するユーザーは、次の要件を最低1つ満たす必要があります。
ルール・セットに対するEXECUTE_ON_RULE_SET権限があること。
EXECUTE_ANY_RULE_SETシステム権限があること。
ルール・セットの所有者であること。
|
注意: ルール・エンジンはアクションを開始しません。戻されたルールとともにアクション・コンテキストが戻る場合がありますが、ルール・エンジンのクライアントは、必要なアクションを開始する必要があります。 |
このファンクションは、TRUEに評価された次のルールをTRUEルールのイテレータから戻します。または、MAYBEに評価された次のルールをMAYBEルールのイテレータから戻します。TRUEまたはMAYBEに評価されるルールがすでに存在しない場合、ファンクションはNULLを戻します。
構文
DBMS_RULE.GET_NEXT_HIT( iterator IN BINARY_INTEGER) RETURN SYS.RE$RULE_HIT;
パラメータ
使用上の注意
このプロシージャには、同じセッションでこのプロシージャより前のDBMS_RULE.EVALUATEコールで戻された、オープン状態のイテレータが必要です。ただし、このプロシージャを実行するユーザーには、評価されるルール・セットに対する権限は必要ありません。
イテレータは、NULLを戻すと自動的にクローズします。 オープンしているイテレータが不要になった場合は、DBMS_RULEパッケージのCLOSE_ITERATORプロシージャを使用してクローズしてください。
|
注意: イテレータを戻したDBMS_RULE.EVALUATEプロシージャをコールした後で、評価されるルール・セットが変更された場合、このファンクションを使用するとエラーになります。ルール・セットの変更には、ルール・セットへのルールの追加、ルール・セット内の既存ルールの変更、ルール・セットからのルールの削除、ルール・セットの削除などがあります。 |