DBMS_RULE
パッケージには、指定されたイベントに対してルール・セットの評価を可能にするサブプログラムが含まれています。
この章では、次の項目について説明します。
概要
セキュリティ・モデル
この項では、DBMS_RULE
パッケージの使用に関連する項目について説明します。
このパッケージには、指定されたイベントに対してルール・セットの評価を可能にするサブプログラムが含まれています。
関連項目:
|
表127-1 DBMS_RULEパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
オープンしているイテレータをクローズします。 |
|
指定した評価コンテキストを使用している指定ルール・セット内のルールを評価します。 |
|
|
このプロシージャは、オープンしているイテレータをクローズします。
このプロシージャは、指定したイベントに対して指定された評価コンテキストを使用する指定ルール・セット内のルールを評価します。
このプロシージャはオーバーロードされています。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);
パラメータ
表127-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.EVALUATE
コールで戻された、オープン状態のイテレータが必要です。ただし、このプロシージャを実行するユーザーには、評価されるルール・セットに対する権限は必要ありません。
イテレータは、NULL
を戻すと自動的にクローズします。オープンしているイテレータが不要になった場合は、DBMS_RULE
パッケージのCLOSE_ITERATOR
プロシージャを使用してクローズしてください。
注意: イテレータを戻したDBMS_RULE.EVALUATE プロシージャをコールした後で、評価されるルール・セットが変更された場合、このファンクションを使用するとエラーになります。ルール・セットの変更には、ルール・セットへのルールの追加、ルール・セット内の既存ルールの変更、ルール・セットからのルールの削除、ルール・セットの削除などがあります。 |