294 ルール・タイプ

この章では、ルール、ルール・セットおよび評価コンテキストで使用するタイプについて説明します。

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

294.1 ルール・タイプの概要

これらのタイプはルールで使用され、クライアントがルール・エンジンを使用してルールを評価できるようにします。

参照:

294.2 ルール・タイプのセキュリティ・モデル

PUBLICには、次のRULEタイプでEXECUTE権限が付与されています。

参照:

ユーザー・グループPUBLICの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

294.3 ルール・タイプの要約

この表は、ルール・タイプを示し、簡単に説明しています。

表294-1 ルール・タイプ

タイプ 説明

RE$ATTRIBUTE_VALUEタイプ

変数の属性の値を指定します。

RE$ATTRIBUTE_VALUE_LISTタイプ

属性値のリストを識別します。

RE$COLUMN_VALUEタイプ

表列の値を指定します。

RE$COLUMN_VALUE_LISTタイプ

列値のリストを識別します。

RE$NAME_ARRAYタイプ

名前のリストを識別します。

RE$NAME_ARRAYタイプ

名前/値ペアのリストを識別します。

RE$NV_LISTタイプ

名前/値ペアのリストとそのリストを操作するメソッドを含むオブジェクトを識別します。このオブジェクト・タイプを使用して、ルールに対するイベント・コンテキストとアクション・コンテキストを表します。

RE$NV_NODEタイプ

名前/値ペアを識別します。

RE$RULE_HITタイプ

評価によって検出されたルールを指定します。

RE$RULE_HIT_LISTタイプ

評価によって検出されたルールのリストを識別します。

RE$RULE_NAMEタイプ

ルールのリストを引数として渡すことを許可します。

RE$RULE_NAME_LISTタイプ

ルール名の値のリストを識別します。

RE$TABLE_ALIASタイプ

ルール評価コンテキストで使用する別名に対応する表を指定します。

RE$TABLE_ALIAS_LISTタイプ

ルール評価コンテキストで使用する表の別名のリストを識別します。

RE$TABLE_VALUEタイプ

ROWIDを使用して、表の行の値を指定します。

RE$TABLE_VALUE_LISTタイプ

表値のリストを識別します。

RE$VALUEタイプ

1つのデータポイント値要素を表します。

RE$VALUE_LISTタイプ

RE$VALUEタイプのリストを定義します。

RE$VARIABLE_TYPEタイプ

ルール評価コンテキストで使用する変数のタイプを指定します。

RE$VARIABLE_TYPE_LISTタイプ

ルール評価コンテキストで使用する変数とそのタイプのリストを識別します。

RE$VARIABLE_VALUEタイプ

変数の値を指定します。

RE$VARIABLE_VALUE_LISTタイプ

変数値のリストを識別します。

ルール・タイプは、オラクル社が提供する次のPL/SQLパッケージで使用します。

  • DBMS_RULE

  • DBMS_RULE_ADM

DBMS_RULE_ADMパッケージは、ルール、ルール・セットおよび評価コンテキストを作成して管理するために使用でき、DBMS_RULEパッケージは、ルールを評価するために使用できます。

Oracle Streamsを使用する場合は、ルールによって、取得プロセスで取得する変更、伝播で伝播するメッセージ、適用プロセスで適用するメッセージ、およびメッセージ・クライアントでデキューするメッセージが判断されます。次のOracle Streamsパッケージでルールが使用されます。

294.3.1 RE$ATTRIBUTE_VALUEタイプ

RE$ATTRIBUTE_VALUEタイプは、変数の属性の値を指定します。

ノート:

変数名および属性名の中に特殊文字が含まれている場合は、二重引用符(")で囲みます。

構文

TYPE SYS.RE$ATTRIBUTE_VALUE (
   variable_name    VARCHAR2(32), 
   attribute_name   VARCHAR2(4000),
   attribute_value  ANYDATA); 

属性

表294-2 RE$ATTRIBUTE_VALUEの属性

属性 説明

variable_name

ルールで使用する変数を指定します。

attribute_name

属性名を指定します。属性名には、a1.b2.c3のように複数のコンポーネント名を指定できます。

attribute_value

属性値を指定します。

294.3.2 RE$ATTRIBUTE_VALUE_LISTタイプ

RE$ATTRIBUTE_VALUE_LISTタイプは、属性値のリストを識別します。

構文

TYPE SYS.RE$ATTRIBUTE_VALUE_LIST AS VARRAY(1024) OF SYS.RE$ATTRIBUTE_VALUE;

294.3.3 RE$COLUMN_VALUEタイプ

RE$COLUMN_VALUEタイプは、表列の値を指定します。

ノート:

列名の中に特殊文字が含まれている場合は、二重引用符(")で囲みます。

構文

TYPE SYS.RE$COLUMN_VALUE (
   table_alias   VARCHAR2(32), 
   column_name   VARCHAR2(4000),
   column_value  ANYDATA); 

属性

表294-3 RE$COLUMN_VALUEの属性

属性 説明

table_alias

ルールの表に使用する別名を指定します。

column_name

列名を指定します。

column_value

列値を指定します。

294.3.4 RE$COLUMN_VALUE_LISTタイプ

RE$COLUMN_VALUE_LISTタイプは、列値のリストを識別します。

構文

TYPE SYS.RE$COLUMN_VALUE_LIST AS VARRAY(1024) OF SYS.RE$COLUMN_VALUE;

294.3.5 RE$NAME_ARRAYタイプ

RE$NAME_ARRAYタイプは、名前のリストを識別します。

構文

TYPE SYS.RE$NAME_ARRAY AS VARRAY(1024) OF VARCHAR2(30);

294.3.6 RE$NV_ARRAYタイプ

RE$NV_ARRAYタイプは、名前/値ペアのリストを識別します。

構文

TYPE SYS.RE$NV_ARRAY AS VARRAY(1024) OF SYS.RE$NV_NODE;

294.3.7 RE$NV_LISTタイプ

名前/値ペアのリストとそのリストを操作するメソッドを含むオブジェクトを識別します。

このオブジェクト・タイプを使用して、ルール・セット評価に対するイベント・コンテキストとルールに対するアクション・コンテキストを表します。

構文

TYPE SYS.RE$NV_LIST AS OBJECT( 
   actx_list  SYS.RE$NV_ARRAY);

属性

表294-4 RE$NV_LISTの属性

属性 説明

actx_list

名前/値ペアのリスト。

RE$NV_LISTサブプログラム

この項では、SYS.RE$NV_LISTタイプの次のメンバー・プロシージャおよびメンバー・ファンクションについて説明します。

ADD_PAIRメンバー・プロシージャ

名前/値ペアを名前/値ペアのリストに追加します。

ノート:

名前の中に特殊文字が含まれている場合は、二重引用符(")で囲みます。

構文

MEMBER PROCEDURE ADD_PAIR(
   name   IN  VARCHAR2, 
   value  IN  ANYDATA);

パラメータ

表294-5 ADD_PAIRプロシージャのパラメータ

パラメータ 説明

name

リストに追加する名前/値ペアの名前。リスト内に名前が存在する場合は、エラーが発生します。

value

リストに追加する名前/値ペアの値。

GET_ALL_NAMESメンバー・ファンクション

名前/値ペアのリスト内にあるすべての名前のリストを戻します。

構文

MEMBER FUNCTION GET_ALL_NAMES()
RETURN SYS.RE$NAME_ARRAY;

GET_VALUEメンバー・ファンクション

名前/値ペアのリスト内の指定の名前に対応する値を戻します。

ノート:

名前の中に特殊文字が含まれている場合は、二重引用符(")で囲みます。

構文

MEMBER FUNCTION GET_VALUE(
   name  IN  VARCHAR2) 
RETURN ANYDATA;

パラメータ

表294-6 GET_VALUEファンクションのパラメータ

パラメータ 説明

name

値を戻す名前。

REMOVE_PAIRメンバー・プロシージャ

指定した名前の名前/値ペアを、名前/値ペアのリストから削除します。

ノート:

名前の中に特殊文字が含まれている場合は、二重引用符(")で囲みます。

構文

MEMBER PROCEDURE REMOVE_PAIR(
   name  IN  VARCHAR2);

パラメータ

表294-7 REMOVE_PAIRプロシージャのパラメータ

パラメータ 説明

name

削除する組合せの名前。

294.3.8 RE$NV_NODEタイプ

RE$COLUMN_VALUEタイプは、名前/値ペアを識別します。

ノート:

名前の中に特殊文字が含まれている場合は、二重引用符(")で囲みます。

構文

TYPE SYS.RE$NV_NODE (
   nvn_name   VARCHAR2(30), 
   nvn_value  ANYDATA); 

属性

表294-8 RE$NV_NODEの属性

属性 説明

nvn_name

名前/値ペアの名前を指定します。

nvn_value

名前/値ペアの値を指定します。

294.3.9 RE$RULE_HITタイプ

RE$RULE_HITタイプは、評価によって検出されたルールを指定します。

構文

TYPE SYS.RE$RULE_HIT (
   rule_name            VARCHAR2(65),
   rule_action_context  RE$NV_LIST); 

属性

表294-9 RE$RULE_HITの属性

属性 説明

rule_name

schema_name.rule_name形式のルール名。たとえば、hrスキーマ内のemployee_ruleというルールは、"hr"."employee_rule"の形式で戻されます。

rule_action_context

DBMS_RULE_ADMパッケージのCREATE_RULEプロシージャまたはALTER_RULEプロシージャで指定したルール・アクション・コンテキスト。

294.3.10 RE$RULE_HIT_LISTタイプ

RE$RULE_HIT_LISTタイプは、評価によって検出されたルールのリストを識別します。

構文

TYPE SYS.RE$RULE_HIT_LIST AS VARRAY(1024) OF SYS.RE$RULE_HIT;

294.3.11 RE$RULE_NAMEタイプ

RE$RULE_HITタイプは、ルールのリストを引数として渡すことができるようにします。

構文

CREATE OR REPLACE TYPE SYS.RE$RULE_NAME AS OBJECT(
  rule_name            IN       varchar2,
  evaluation_context   IN       varchar2);

属性

表294-10 RE$RULE_NAMEの属性

属性 説明

rule_name

SCHEMA_NAME.RULE_NAME形式のルール名。たとえば、hrスキーマ内のemployee_ruleというルールは、"hr"."employee_rule"の形式で戻されます。

Evaluation_context

DBMS_RULE_ADMパッケージのCREATE_RULEまたはALTER_RULEプロシージャで指定された評価コンテキスト。

294.3.12 RE$RULE_NAME_LISTタイプ

RE$RULE_HIT_LISTタイプは、ルール名値のリストを識別します。

構文

CREATE OR REPLACE TYPE SYS.RE$RULE_NAME_LIST AS VARRAY(1024) OF SYS.RE$RULE_NAME;

294.3.13 RE$TABLE_ALIASタイプ

RE$TABLE_ALIASタイプは、ルール評価コンテキストで使用する別名に対応する表を指定します。

指定する表名は、スキーマ・オブジェクトのネーミング規則に準拠する必要があります。

ノート:

表名の中に特殊文字が含まれている場合は、二重引用符(")で囲みます。

参照:

スキーマ・オブジェクトのネーミング規則は、『Oracle Database SQL言語リファレンス』を参照してください。

構文

TYPE SYS.RE$TABLE_ALIAS IS OBJECT(
   table_alias  VARCHAR2(32),
   table_name   VARCHAR2(194));

属性

表294-11 RE$TABLE_ALIASの属性

属性 説明

table_alias

ルールの表に使用する別名。

table_name

別名によって参照される表名。シノニムも指定できます。表名は、評価コンテキスト・スキーマで解決されます。

形式は次のいずれかです。

schema_name.table_name

table_name

たとえば、schema_namehrで、table_nameemployeesの場合は、次のように入力します。

hr.employees

294.3.14 RE$TABLE_ALIAS_LISTタイプ

RE$TABLE_ALIAS_LISTタイプは、ルール評価コンテキストで使用する表の別名のリストを識別します。

構文

TYPE SYS.RE$TABLE_ALIAS_LIST AS VARRAY(1024) OF SYS.RE$TABLE_ALIAS;

294.3.15 RE$TABLE_VALUEタイプ

RE$TABLE_VALUEタイプは、ROWIDを使用して、表の行の値を指定します。

構文

TYPE SYS.RE$TABLE_VALUE(
   table_alias  VARCHAR2(32), 
   table_rowid  VARCHAR2(18));

属性

表294-12 RE$TABLE_VALUEの属性

属性 説明

table_alias

ルールの表に使用する別名を指定します。

table_rowid

表の行のROWIDを指定します。

294.3.16 RE$TABLE_VALUE_LISTタイプ

RE$TABLE_VALUE_LISTタイプは、表値のリストを識別します。

ノート:

表の別名はそれぞれ一意である必要があります。

構文

TYPE SYS.RE$TABLE_VALUE_LIST AS VARRAY(1024) OF SYS.RE$TABLE_VALUE;

294.3.17 RE$VALUEタイプ

RE$VALUEタイプは、1つのデータポイント値要素を表します。

構文

TYPE SYS.RE$VALUE  (
     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)

属性

表294-13 RE$VALUEの属性

属性 説明

table_values

式の評価に使用される表の行のROWID

column_ values

式で参照される列の値。

variable_values

式で参照される変数の値

attribute_values

式で参照される属性の値。

294.3.18 RE$VALUE_LISTタイプ

RE$TABLE_VALUE_LISTは、RE$VALUEタイプのリストを定義するためのVARRAYです。これは、データポイント要素のリストを表します。

構文

CREATE OR REPLACE TYPE SYS.RE$VALUE _LIST AS VARRAY(1024) OF SYS.RE$VALUE;

294.3.19 RE$VARIABLE_TYPEタイプ

RE$VARIABLE_TYPEタイプは、ルール評価コンテキストで使用する変数のタイプを提供します。指定する変数名は、スキーマ・オブジェクトのネーミング規則に準拠する必要があります。

ノート:

変数名の中に特殊文字が含まれている場合は、二重引用符(")で囲みます。

参照:

スキーマ・オブジェクトのネーミング規則は、『Oracle Database SQL言語リファレンス』を参照してください。

構文

TYPE SYS.RE$VARIABLE_TYPE (
   variable_name             VARCHAR2(32),
   variable_type             VARCHAR2(4000),
   variable_value_function   VARCHAR2(228),
   variable_method_function  VARCHAR2(228));

属性

表294-14 RE$VARIABLE_TYPEの属性

属性 説明

variable_name

ルールで使用する変数名。

variable_type

評価コンテキスト・スキーマで解決するタイプ。有効なOracleの組込みデータ・タイプ、ユーザー定義タイプまたはオラクル社が提供するタイプを指定できます。これらのタイプの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

variable_value_function

暗黙的な変数に対して指定できる値ファンクション。シノニムも指定できます。ファンクション名は、評価コンテキスト・スキーマで解決されます。評価コンテキストを使用するルール・セット、または評価コンテキストを使用するルールを含むルール・セットの所有者にかわって実行されます。

詳細は、「使用上のノート」を参照してください。

variable_method_function

メソッド起動の結果を戻す値関数を指定します。変数に対してメソッドを起動する単純なルールが多数ある場合は、この関数を指定すると評価を高速化できます。関数には、シノニムまたはリモート関数も指定できます。

ファンクション名は、評価コンテキスト・スキーマで解決されます。評価コンテキストを使用するルール・セット、または評価コンテキストを使用するルールを含むルール・セットの所有者にかわって実行されます。

詳細は、「使用上のノート」を参照してください。

使用上のノート

variable_value_functionパラメータおよびvariable_method_functionパラメータの両方で指定する関数は、次の形式になります。

schema_name.package_name.function_name@dblink

この形式のうち、schema_namepackage_nameおよび@dblinkの部分は省略できます。

たとえば、schema_namehrpackage_namevar_pacfunction_namefunc_valuedblinkdbs1.netの場合は、次のように入力します。

hr.var_pac.func_value@dbs1.net

次の各項では、関数の署名について説明します。

variable_value_functionの署名

この関数には、次の署名が必要です。

FUNCTION variable_value_function_name(
  evaluation_context_schema  IN VARCHAR2,       
  evaluation_context_name    IN VARCHAR2,
  variable_name              IN VARCHAR2,
  event_context              IN SYS.RE$NV_LIST )
RETURN SYS.RE$VARIABLE_VALUE;

variable_method_functionの署名

この関数には、次の署名が必要です。

FUNCTION variable_method_function_name(    
  evaluation_context_schema  IN VARCHAR2, 
  evaluation_context_name    IN VARCHAR2, 
  variable_value             IN SYS.RE$VARIABLE_VALUE, 
  method_name                IN VARCHAR2, 
  event_context              IN SYS.RE$NV_LIST)
RETURN SYS.RE$ATTRIBUTE_VALUE;

294.3.20 RE$VARIABLE_TYPE_LISTタイプ

RE$VARIABLE_TYPE_LISTタイプは、ルール評価コンテキストで使用する変数とそのタイプのリストを識別します。

構文

TYPE SYS.RE$VARIABLE_TYPE_LIST AS VARRAY(1024) OF SYS.RE$VARIABLE_TYPE;

294.3.21 RE$VARIABLE_VALUEタイプ

RE$VARIABLE_VALUEタイプは、変数の値を指定します。

ノート:

変数名の中に特殊文字が含まれている場合は、二重引用符(")で囲みます。

構文

TYPE SYS.RE$VARIABLE_VALUE (
   variable_name  VARCHAR2(32), 
   variable_data  ANYDATA); 

属性

表294-15 RE$VARIABLE_VALUEの属性

属性 説明

variable_name

ルールで使用する変数名を指定します。

variable_data

変数値のデータを指定します。

294.3.22 RE$VARIABLE_VALUE_LISTタイプ

RE$VARIABLE_VALUE_LISTタイプは、変数値のリストを識別します。

構文

TYPE SYS.RE$VARIABLE_VALUE_LIST AS VARRAY(1024) OF SYS.RE$VARIABLE_VALUE;