158 DBMS_RULE
DBMS_RULE
パッケージには、指定されたイベントに対してルール・セットの評価を可能にするサブプログラムが含まれています。
この章のトピックは、次のとおりです:
158.1 DBMS_RULEの概要
このパッケージには、指定されたイベントに対してルール・セットの評価を可能にするサブプログラムが含まれています。
参照:
-
DBMS_RULE
パッケージで使用されるルール・タイプの詳細は、「ルール・タイプ」を参照してください。
158.2 DBMS_RULEのセキュリティ・モデル
PUBLIC
には、このパッケージのEXECUTE
権限が付与されます。
参照:
ユーザー・グループPUBLIC
の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
158.3 DBMS_RULEサブプログラムの要約
この表は、DBMS_RULE
サブプログラムを示し、簡単に説明しています。
表158-1 DBMS_RULEパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
オープンしているイテレータをクローズします。 |
|
指定した評価コンテキストを使用している指定ルール・セット内のルールを評価します。 |
|
セッションのログイン・ユーザーとして式を評価します。 |
|
関連するデータポイントを検索し、 |
|
ルールに定義された条件を評価します。 |
|
関連するデータポイントを検索し、 |
|
|
|
式を高速と評価できる場合、 |
|
|
158.3.1 CLOSE_ITERATORプロシージャ
このプロシージャは、オープンしているイテレータをクローズします。
構文
DBMS_RULE.CLOSE_ITERATOR( iterator IN BINARY_INTEGER);
パラメータ
表158-2 CLOSE_ITERATORプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
クローズされるイテレータ。 |
使用上のノート
このプロシージャには、同じセッションでこのプロシージャより前のDBMS_RULE.EVALUATE
コールで戻された、オープン状態のイテレータが必要です。ただし、このプロシージャを実行するユーザーには、評価されるルール・セットに対する権限は必要ありません。
イテレータをクローズすると、そのイテレータに関連するメモリーなどのリソースが解放されます。そのため、不要になったイテレータはクローズすることをお薦めします。
参照:
158.3.2 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,
skip_rules IN SYS.RE$RULE_NAME_LIST DEFAULT NULL,
dop IN NUMBER,
result_cache IN BOOLEAN DEFAULT FALSE, 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,
skip_rules IN SYS.RE$RULE_NAME_LIST DEFAULT NULL,
dop IN NUMBER,
simple_rules_only IN BOOLEAN DEFAULT FALSE, true_rules_iterator OUT BINARY_INTEGER, maybe_rules_iterator OUT BINARY_INTEGER);
パラメータ
表158-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
システム権限があること。 -
ルール・セットの所有者であること。
ノート:
ルール・エンジンはアクションを開始しません。戻されたルールとともにアクション・コンテキストが戻る場合がありますが、ルール・エンジンのクライアントは、必要なアクションを開始する必要があります。
参照:
-
DBMS_RULE
パッケージで使用されるルール・タイプの詳細は、「ルール・タイプ」を参照してください。
-
158.3.3 EVALUATE_EXPRESSIONプロシージャ
このプロシージャを使用すると、セッションのログイン・ユーザーとして式を評価できます。
同じ表別名と変数タイプを使用して同一の式を再実行した場合、同じコンパイルされたコンテキストが再利用されます。コンパイルするキャッシュのサイズが固定されている場合、期限切れになる可能性があります。
構文
DBMS_RULE.EVALUATE_EXPRESSION( rule_expression IN VARCHAR2, table_aliases IN SYS.RE$TABLE_ALIAS_LIST:= NULL, variable_types IN SYS.RE$VARIABLE_TYPE_LIST:= NULL, table_values IN SYS.RE$TABLE_VALUE_LIST:= NULL, column_values IN SYS.RE$COLUMN_VALUE_LIST:=NULL, variable_values IN SYS.RE$VARIABLE_VALUE_LIST:=NULL, attribute_values IN SYS.RE$ATTRIBUTE_VALUE_LIST:=NULL, cache IN BOOLEAN DEFAULT FALSE, result_val OUT BOOLEAN);
パラメータ
Table 158-4 EVALUATE_EXPRESSIONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
式の文字列が含まれます。 |
|
式の文字列で参照される表の別名が含まれます。 |
|
式で使用される変数のタイプ定義が含まれます。 |
|
式の評価に使用される表の行の |
|
式で参照される列の値が含まれます。 |
|
式で参照される変数の値が含まれます。 |
|
式で参照される属性の値が含まれます。 |
|
|
|
評価の結果。 |
158.3.4 EVALUATE_EXPRESSION_ITERATORプロシージャ
これは、ユーザーに表示されるインタフェースです。PL/SQLベースのコールバックは非効率的であるため、配列ベースの方法が用意されています。クライアント・プログラムは、関連するデータポイントを検索し、re$value_list
を評価インタフェースに渡すと想定されます。式評価エンジンがこのリストを処理し、各データポイント(re$value_list
)要素の式を評価します。
構文
DBMS_RULE.EVALUATE_EXPRESSION_ITERATOR( rule_expression IN varchar2, table_aliases IN sys.re$table_alias_list:= NULL, variable_types IN sys.re$variable_type_list:= NULL, values IN sys.re$value_list, cache IN boolean DEFAULT FALSE, result_val_iter_id OUT BINARY_INTEGER)
パラメータ
表158-5 EVALUATE_EXPRESSION_ITERATORプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
式の文字列が含まれます。 |
|
前述の式の文字列で参照される表の別名。 |
|
式で使用される変数のタイプ定義。 |
|
この評価のデータポイント値のリスト。 |
|
|
|
|
158.3.5 EVALUATE_RULEプロシージャ
ルール評価APIでは、CREATE_RULE
プロシージャを正しいEVALUATION_CONTEXT
で事前にコールしておく必要があります。このAPIは、ルールに定義された条件を評価します。
構文
DBMS_RULE.EVALUATE_RULE( rule_name 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, cache IN BOOLEAN DEFAULT FALSE, result_val OUT BOOLEAN);
パラメータ
表158-6 EVALUATE_RULEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
評価の原因となるイベントを識別する名前/値ペアのリスト。 |
|
式の評価に使用される表の行の |
|
式で参照される列の値。 |
|
式で参照される変数の値。 |
|
式で参照される属性の値。 |
|
|
|
評価の結果 |
158.3.6 EVALUATE_RULE_ITERATORプロシージャ
これは反復インタフェースです。クライアント・プログラムは、関連するデータポイントを検索し、re$value_list
を評価インタフェースに渡すと想定されます。
評価エンジンがこのリストを処理し、各データポイント(re$value_list
)要素の式を評価します。ユーザーはDBMS_RULE.GET_NEXT_RESULT
プロシージャを使用して結果リストを反復処理します。
構文
DBMS_RULE.EVALUATE_RULE_ITERATOR) rule_name IN VARCHAR2, event_context IN SYS.RE$NV_LIST DEFAULT NULL, values IN SYS.RE$VALUE_LIST, cache IN BOOLEAN DEFAULT FALSE, result_val_iter_id OUT BINARY_INTEGER);
パラメータ
表158-7 EVALUATE_RULE_ITERATORプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
評価の原因となるイベントを識別する名前/値ペアのリスト。 |
|
この評価のデータポイント値のリスト。 |
|
|
|
|
158.3.7 GET_NEXT_HITファンクション
このファンクションは、TRUE
に評価された次のルールをTRUEルールのイテレータから戻し、またはMAYBE
に評価された次のルールをMAYBEルールのイテレータから戻します。TRUE
またはMAYBE
に評価されるルールがすでに存在しない場合、ファンクションはNULL
を戻します。
構文
DBMS_RULE.GET_NEXT_HIT( iterator IN BINARY_INTEGER) RETURN SYS.RE$RULE_HIT;
パラメータ
表158-8 GET_NEXT_HITファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
|
使用上のノート
このプロシージャには、同じセッションでこのプロシージャより前のDBMS_RULE.EVALUATE
コールで戻された、オープン状態のイテレータが必要です。ただし、このプロシージャを実行するユーザーには、評価されるルール・セットに対する権限は必要ありません。
イテレータは、NULL
を戻すと自動的にクローズします。オープンしているイテレータが不要になった場合は、DBMS_RULE
パッケージのCLOSE_ITERATOR
プロシージャを使用してクローズしてください。
ノート:
イテレータを戻したDBMS_RULE.EVALUATE
プロシージャをコールした後で、評価されるルール・セットが変更された場合、このファンクションを使用するとエラーになります。ルール・セットの変更には、ルール・セットへのルールの追加、ルール・セット内の既存ルールの変更、ルール・セットからのルールの削除、ルール・セットの削除などがあります。
参照:
-
DBMS_RULE
パッケージで使用されるルール・タイプの詳細は、「ルール・タイプ」を参照してください。
158.3.8 GET_NEXT_RESULTファンクション
このファンクションは、RESULT_VAL_ITERATOR
で指定された式の結果を反復処理します。TRUE
またはFALSE
に評価される式をイテレータで戻します。
構文
DBMS_RULE.GET_NEXT_RESULT ( result_val_iterator_id IN BINARY_INTEGER) RETURN BOOLEAN;
パラメータ
表158-9 GET_NEXT_RESULTファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
|
158.3.9 IS_FASTプロシージャ
このプロシージャは、ルールの式または独立した式について、高速と評価できる場合はTRUE
を戻します。式を高速と評価できるのは、エンジンで内部SQLを実行する必要がなく、PL/SQLが参照されたときでもPL/SQLレイヤーに移動する必要がない場合です。
構文
DBMS_RULE.IS_FAST( expression IN VARCHAR2, table_aliases IN SYS.RE$TABLE_ALIAS_LIST:= NULL, variable_types IN SYS.RE$VARIABLE_TYPE_LIST:= NULL, result_val OUT BOOLEAN);
パラメータ
表158-10 IS_FASTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
チェックする式。 |
|
前述の式の文字列で参照される表の別名。 |
|
式で使用される変数のタイプ定義。 |
|
式が高速と評価できる場合 |