式フィルタ機能およびルール・マネージャ機能では、スキーマ・オブジェクトを使用してユーザー表のExpression列がメンテナンスされます。これらのオブジェクトのほとんどは、Expression列を持つ表のスキーマに作成されます。また、これらのオブジェクトは、EXF$
接頭辞付き(式フィルタ)またはRLM$
接頭辞付き(ルール・マネージャ)で作成され、式フィルタAPIまたはルール・マネージャAPIを使用してメンテナンスされます。この種のオブジェクトは変更しないでください。
式フィルタでは、属性セットの概念が同じ名前のオブジェクト型を介して維持され、ルール・マネージャでは、イベント構造の概念が同じ名前のオブジェクト型を介して維持されます。属性セットまたはイベント構造に使用されるオブジェクト型にユーザー・メソッドを含めることはできず、展開型(SQLのALTER TYPE
コマンドを使用)にはできません。属性セットまたはイベント構造が既存のオブジェクト型から作成されていない場合、式フィルタまたはルール・マネージャでは同じ名前のオブジェクト型が作成され、属性セットまたはイベント構造の存続期間を通じてメンテナンスされます。また、データ項目の管理、動的な式の評価および式の型チェックのために、オブジェクト型用の関数も生成されます。
式フィルタおよびルール・マネージャでは、このオブジェクト型に加えて、オブジェクト型のNESTED TABLE型が同じスキーマに作成されます。このNESTED TABLE型では、ネームスペースEXF$NTT_
n
が使用され、式の妥当性チェックに内部的に使用されます。
属性セットまたはイベント構造用に作成されたオブジェクト型を使用すると、対応するデータ項目を格納する表を作成できます。この種の表にそのオブジェクト型の列を含める方法と、オブジェクト型から表自体を作成する方法があります。この種の表は式を格納する表と結合できます。次に、第11章での適用例を使用した例を示します。
-- a table of type -- CREATE TABLE CarInventory OF Car4Sale; INSERT INTO CarInventory VALUES ('Mustang',2000, 18000, 22000); INSERT INTO CarInventory VALUES ('Mustang',2000, 18000, 22000); INSERT INTO CarInventory VALUES ('Taurus',1997, 14000, 24500); SELECT * FROM Consumer, CarInventory Car WHERE EVALUATE (Consumer.Interest, Car.getVarchar()) = 1; -- table with the object type column -- CREATE TABLE CarStock (CarId NUMBER, Details Car4Sale); INSERT INTO CarStock VALUES (1, Car4Sale('Mustang',2000, 18000, 22000)); INSERT INTO CarStock VALUES (2, Car4Sale('Mustang',2000, 18000, 22000)); INSERT INTO CarStock VALUES (3, Car4Sale('Taurus',1997, 14000, 24500)); SELECT * FROM Consumer, CarStock Car WHERE EVALUATE (Consumer.Interest, Car.Details.getVarchar()) = 1;
注意: 属性セットまたはイベント構造のメンテナンスに使用するオブジェクト型の変更には、SQLのALTER TYPE またはCREATE OR REPLACE TYPE コマンドを使用しないでください。これらのオブジェクトの変更を制限するために、システム・トリガーが使用されます。 |
第C.2.1項、第C.2.2項および第C.2.3項では、式フィルタの内部オブジェクトに関する式フィルタ固有の情報について説明します。
ユーザー表のVARCHAR2
列に属性セットを割り当ててExpression列を作成すると、その表にBEFORE ROW
トリガーが作成されます。このトリガーは、新しい式の追加時または既存の式の変更時に式有効化ルーチンを起動するために使用されます。このトリガーは常にEXFSYS
スキーマに作成され、ネームスペースEXF$VALIDATE_
n
が使用されます。
列に対して定義された式フィルタ索引は、索引と同じスキーマに作成されたデータベース・オブジェクトを使用してメンテナンスされます。第12.8項を参照してください。