この項では、次の種類のプログラムについて概説します。
起動プログラムは、ユーザー自身が作成するプログラムで、AW ATTACH文の実行時、Oracle OLAPによってその名前がチェックされます。起動プログラムは、定義および作成しないかぎりアナリティック・ワークスペースには存在しません。起動プログラムでは、任意のOLAP DML文を実行でき、独自のプログラムも実行可能です。たとえば、起動プログラムにより、オプションをアプリケーションに適した値に設定できます。
この項では、Oracle OLAPが認識する起動プログラムの種類を説明します。これらのプログラムが実行される順序は、「アナリティック・ワークスペースをアタッチするときに実行されるプログラム」を参照してください。
起動プログラムは、次の2つのカテゴリに大別されます。
同一のアナリティック・ワークスペース内で定義された起動プログラム。このプログラムの実行はAW ATTACH文によりトリガーされます。このカテゴリには、次のような起動プログラムが属します。
TRIGGER_AWという名前のプログラム。アナリティック・ワークスペース内で定義され、別のアナリティック・ワークスペースに対してAW ATTACH文が発行された場合に実行されます。
権限プログラムは、管理者が作成するプログラムで、ワークスペースのデータにアクセスするアクセス権をユーザーに付与します。ユーザーがアナリティック・ワークスペースをアタッチすると、Oracle OLAPは、アタッチ・モードに適した権限プログラムが存在するかどうかを確認します(アタッチ・モードごとの権限プログラムには、表4-2「様々なアタッチ・モードに対応する権限プログラムの名前」に示されている特定の名前が必要です)。該当する権限プログラムが存在する場合は、Oracle OLAPによってそのプログラムが実行されます。アナリティック・ワークスペースをアタッチするときにユーザーがパスワードを指定すると、このパスワードは権限プログラムの処理に引数として渡されます。
注意: ディメンション・サロゲートには、そのディメンションのアクセス権があります。そのディメンションのディメンション・サロゲートの値にアクセスするためにアクセス権を付与または拒否するには、そのディメンションに対してPERMITを使用します。 |
権限プログラムにより、プログラムが常駐するアナリティック・ワークスペースに対して2つのレベルのアクセス権が制御可能です。
アナリティック・ワークスペース・レベルでのアクセス: 権限プログラムの戻り値に応じて、アナリティック・ワークスペース全体へのアクセスがユーザーに許可されるかどうかが決定されます。この戻り値を使用すると、ユーザーがワークスペースをアタッチする権限を持っているかどうかをOracle OLAPに示すことができます。
オブジェクト・レベルでのアクセス: 読取り専用、または読取り/書込みアタッチの権限プログラム内でPERMIT文を指定すると、個々のワークスペース・オブジェクトへのアクセス権を許可または制限できます。PERMITプログラムは、PERMIT文の発行対象となるオブジェクトと同じワークスペースに存在する必要があります。
注意: 特定の権限プログラム内で参照されているすべてのオブジェクトは、同じアナリティック・ワークスペースに存在している必要があります。 |
権限プログラムを作成するには、認識可能な名前でユーザー定義ファンクション(「ユーザー定義ファンクションの作成」を参照)を定義し、プログラムの内容を定義します(「プログラム内容の指定」を参照)。
AUTOGOプログラムは、任意の名前でプログラムを定義し、その名前をAUTOGOキーワードに続くAW ATTACH文の中で指定することにより作成できます。
ONATTACHプログラムは、次に示す2つの方法のいずれかで作成できます。
ONATTACH
という名前のプログラムを定義します。AW ATTACH文にNOOTTACHキーワードを指定していなければ、ワークスペースをアタッチするたびにONATTACHプログラムが自動的に実行されます。
プログラムを定義し、任意の名前を付けます。AW ATTACH文を使用してワークスペースをアタッチすると、ONATTACHキーワードの後にその名前を指定することでプログラムを実行できます。これは、アプリケーション開発者にとって有効な手段です。アプリケーションは、ユーザーの選択に応じて異なる起動プログラムを実行できます。
OLAP DMLでは、リレーショナル表、フラット・ファイルおよびスプレッドシートとアナリティック・ワークスペース・オブジェクトとの間で、データのインポートやエクスポートが可能です。
OLAP DMLのSQL文を使用して、SQL文をOLAP DMLプログラムに埋め込むことができます。OLAP DMLのSQL文を使用すると、リレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをインポートしたり、アナリティック・ワークスペース・オブジェクトからリレーショナル表にデータをエクスポートしたりできます。
OLAP DMLプログラム内でOLAP DML SQL文を使用すると、暗黙カーソルまたは明示カーソルのどちらかを使用してアナリティック・ワークスペース・オブジェクトにリレーショナル・データをコピーできます。
暗黙カーソルを使用して、リレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをコピーするには、SQL SELECT文を使用します。このOLAP DML文は、OLAP Worksheetで対話的に使用できる他、OLAP DMLプログラム内で使用することもできます。
明示カーソルを使用して、リレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをコピーするには、次に示す文を順序のとおりに使用します。これらの文は、OLAP DMLプログラム内でのみ使用できます。OLAP Worksheetで対話的に使用することはできません。
SQL DECLARE CURSORを使用して、SQLカーソルをSELECT文またはプロシージャに関連付けて定義します。
SQL OPENを使用して、SQLカーソルをアクティブ化します。
SQL FETCHおよびSQL IMPORTを使用して、カーソルで指定されたデータを取得および処理します。
SQL CLOSEを使用して、SQLカーソルをクローズします。
SQL CLEANUPを使用して、SQLカーソルの宣言を取り消し、SQLカーソルのメモリー・リソースを解放します。
ワークスペース・オブジェクトに表データをコピーするプログラムの例は、SQL FETCHおよびSQL IMPORTを参照してください。
DEFINE、MAINTAIN、PROPERTY、SET(=)、UPDATEおよびAWコマンドは、Oracle OLAPではOLAP DMLプログラムの実行をトリガーするイベントとして認識されます。
DEFINE、MAINTAIN、PROPERTY、UPDATE、SETの各コマンドによりトリガーされるプログラムをオブジェクト・トリガー・プログラムといいます(この項およびTRIGGERコマンドの項を参照)。
TRIGGER_AWという名前のプログラムは、アナリティック・ワークスペース内で定義され、別のアナリティック・ワークスペースが作成、アタッチ、デタッチまたは削除された場合にトリガーされます。詳細は、「TRIGGER_AW」の説明を参照してください。
トリガー・プログラムは、アプリケーション固有のメタデータをメンテナンスするために頻繁に作成されます。トリガー・プログラムには、それらをトリガーする文に応じていくつかの特長があります。トリガー・プログラムには、トリガーする文が実行される前に実行されるものと、後に実行されるものがあります。Oracle OLAPがプログラムに引数を渡すかどうかは、プログラムをトリガーする文によって決まります。Oracle OLAPは、ほとんどのトリガー・プログラムが実行されるまでディメンション・ステータスを変更しませんが、一部のMAINTAIN文がプログラムの実行をトリガーする前にディメンション・ステータスを変更します。ほとんどの場合、トリガー・プログラムには選択した任意の名前を付けることができますが、一部のイベントには特定の名前のプログラムが必要です。「オブジェクト・トリガー・プログラムの特長」では、これらの特性について解説します。
参照: 次の説明を参照してください。
|
オブジェクトがアナリティック・ワークスペースで定義されると、次の手順に従ってオブジェクトのトリガー・プログラムを作成できます。
プログラムを定義します(DEFINE PROGRAMを参照)。
プログラムに付ける名前と、プログラムをユーザー定義プログラムにするかどうかを決定します(表4-3「オブジェクト・トリガー・プログラムの特長」を参照)。プログラムをユーザー定義プログラムにする場合は、トリガー・プログラムをユーザー定義ファンクションとして定義するかどうかを決定します。
プログラムを実際にコーディングします(「プログラム内容の指定」を参照)。
トリガー・プログラムをコーディングする際は、次の点に注意してください。
表4-3「オブジェクト・トリガー・プログラムの特長」を基に、Oracle OLAPが値をプログラムに渡すかどうかを判断します。渡す場合は、ARGUMENT文を使用してそれらの引数をプログラム内で宣言し、VARIABLE文を使用して値のプログラム変数を定義します(引数の詳細は、表4-4「トリガー・プログラムに渡される引数」を参照)。
Assignイベントによってトリガーされるプログラムは、イベントが定義されたオブジェクトにOracle OLAPが値を割り当てるたびに実行されます。このため、Assignイベントでトリガーされるプログラムは通常、代入文がオブジェクトをループ処理して値を代入するときに繰り返し実行されます。TRIGGERASSIGNを使用して、プログラムの実行をトリガーした代入文により指定される値とは異なる値を割り当てることができます。
場合によっては、Oracle OLAPは、Maintainイベントがプログラムの実行をトリガーする際にメンテナンスされるディメンションのステータスを変更します。詳細は、表4-5「Maintainイベントによりトリガーされたプログラムがディメンション・ステータスに与える影響」を参照してください。
プログラム内でCALLTYPEファンクションを使用して、プログラムがトリガーとして実行されたことを識別します。
トリガー・プログラムがTRIGGER_AFTER_UPDATE、TRIGGER_BEFORE_UPDATEまたはTRIGGER_DEFINEプログラムではない場合、TRIGGERコマンドを使用してプログラムを適切なオブジェクトおよびイベントに関連付けます。
再帰的トリガーはサポートされていません。USETRIGGERSオプションをNO
に設定してから、トリガー・プログラム自体をトリガーするトリガー・プログラムの内部で同じDML文を発行する必要があります。たとえば、MAINTAIN ADD文によってトリガーされる、TRIGGER_MAINTAIN_ADD
というプログラムを作成したとします。TRIGGER_MAINTAIN_ADD
プログラムの内部で、USETRIGGERSオプションをNO
に設定してからMAINTAIN文を発行する必要があります。
オブジェクト・トリガー・プログラムには、それらをトリガーする文に応じていくつかの特長があります。トリガー・プログラムには、トリガーする文が実行される前に実行されるものと、後に実行されるものがあります。Oracle OLAPがプログラムに引数を渡すかどうかは、プログラムをトリガーする文によって決まります。Oracle OLAPは、ほとんどのトリガー・プログラムが実行されるまでディメンション・ステータスを変更しませんが、一部のMAINTAIN文がプログラムの実行をトリガーする前にディメンション・ステータスを変更します。ほとんどの場合、トリガー・プログラムには選択した任意の名前を付けることができますが、一部のイベントには特定の名前のプログラムが必要です。
表4-3「オブジェクト・トリガー・プログラムの特長」には、プログラムをトリガーするOLAP DML文、プログラムの必須名(存在する場合)、Oracle OLAPがプログラムによる戻り値を使用するかどうか、Oracle OLAPがプログラムに引数を渡すかどうかが記載されています。
トリガー・プログラムの設計時には、次の点に注意してください。
DML文の前に実行されるトリガー・プログラム: トリガー側のOLAP DML文が実行される前に実行されるトリガー・プログラムの場合は、BOOLEAN
値を返すユーザー定義ファンクションとしてトリガー・プログラムを定義できます。このプログラムによる戻り値は、トリガー・プログラムの実行をトリガーした文をOracle OLAPが実行するかどうかを決定します。プログラムの戻り値がFALSE
の場合、Oracle OLAPはトリガー側の文を実行しませんが、戻り値がTRUE
またはNA
の場合は、トリガー側の文が実行されます。
トリガー・プログラムに渡される引数: Oracle OLAPは、一部のトリガー・プログラムに引数を渡します。これらのプログラムは、表4-3「オブジェクト・トリガー・プログラムの特長」に記載されています。また、引数の説明は、表4-4「トリガー・プログラムに渡される引数」に記載されています。これらの引数をプログラム内で宣言するには、ARGUMENT文を使用します。値に対してプログラム変数を定義するには、VARIABLEを使用します。WKSDATAファンクションを使用して、WORKSHEET
データ型で引数のデータ型を取得します。
Assignトリガー・プログラム: Oracle OLAPは、イベントが定義されたオブジェクトに値を代入するたびに、Assignイベントによってトリガーされるプログラムを実行します。このため、Assignイベントでトリガーされるプログラムは通常、代入文がオブジェクトをループ処理して値を代入するときに繰り返し実行されます。これが実行されるたびに、代入される値は、引数1としてAssignトリガー・プログラムに渡されます(詳細は、表4-4「トリガー・プログラムに渡される引数」を、例については例10-162「変数のASSIGNトリガー」を参照)。Assignトリガー・プログラムの中でTRIGGER ASSIGN文を使用すると、Assignトリガー・プログラムの実行をトリガーした代入文により指定される値とは別の値を代入できます。
計算式に値を代入できるのは、その計算式にAssignトリガーが定義されている場合のみです。Assignイベントを持つ計算式に値を代入すると、Oracle OLAPは、代入された値のイベントに対してトリガー・プログラムを実行し、代入された値をトリガー・プログラムに渡します。Assignトリガーは、計算式自体の定義は変更しません。計算式に関するAssignトリガーの例は、例10-164「計算式に関するASSIGNトリガー」を参照してください。
Maintainトリガー・プログラムとディメンション・ステータス: Maintainイベントがプログラムの実行をトリガーすると、Oracle OLAPは、メンテナンスの対象になっているディメンションのステータスを変更する場合があります。詳細は、表4-5「Maintainイベントによりトリガーされたプログラムがディメンション・ステータスに与える影響」を参照してください。
Maintainトリガーとディメンション・サロゲート: ディメンション・サロゲートのMaintainトリガーは、その他のオブジェクトのMaintainトリガーとは異なります。ディメンション・サロゲートに対してMAINTAIN文を正常に発行できるのは、ディメンション・サロゲートにMaintainトリガーが存在する場合のみです。Maintainトリガーのないディメンション・サロゲートに対してMAINTAIN文を発行すると、エラーが返されます。さらに、Maintain AddトリガーやMaintain Mergeトリガーの場合も、引数がプログラムに渡されるかどうかは、次のようにトリガーが定義されるオブジェクトによって決まります。
Maintainトリガーを持つディメンション・サロゲートの場合、Oracle OLAPは、値が追加またはマージされるたびにトリガー・プログラムを1回実行し、値をプログラムに渡します。
Maintainトリガーを持つその他のオブジェクトの場合、Oracle OLAPが実行するトリガー・プログラムはMAINTAIN文の実行後1回のみであり、プログラムに値は渡されません。
表4-3 オブジェクト・トリガー・プログラムの特長
トリガー側の文(イベント) | プログラム名 | 戻り値 | 渡される引数 |
---|---|---|---|
=(代入)文(SET) |
必須名なし |
なし |
あり |
DEFINE |
|
なし |
なし |
MAINTAIN ADD |
必須名なし |
なし |
なし |
MAINTAIN DELETE(ALL以外) |
必須名なし |
あり |
なし |
MAINTAIN DELETE ALL |
必須名なし |
あり |
なし |
MAINTAIN MERGE |
必須名なし |
なし |
なし |
MAINTAIN MOVE |
必須名なし |
あり |
あり |
MAINTAIN RENAME |
必須名なし |
あり |
あり |
PROPERTY |
必須名なし |
あり |
あり |
UPDATE (Update AW) |
|
なし |
なし |
UPDATE (Update AW) |
|
あり |
なし |
UPDATE (Update Multi) |
必須名なし |
なし |
なし |
表4-4 トリガー・プログラムに渡される引数
イベント | 引数1 | 引数2 |
---|---|---|
Property |
PROPERTY文によってプロパティがオブジェクトに割り当てられている場合は、プロパティの名前。PROPERTY文によって1つ以上のプロパティが削除される場合は、リテラル |
引数1の値が |
Assignment |
代入する値。値の代入先となるオブジェクトのデータ型がわかったら、そのデータ型を引数に指定する。実際のデータ型がわからない場合は、引数のデータ型として |
なし。Oracle OLAPからプログラムに渡される引数は1つのみ。 |
Maintain Add |
(ディメンション・サロゲート専用)追加された値。( |
|
Maintain Rename |
名前変更の対象となるディメンション値。( |
ディメンション・メンバーの新しい名前。( |
Maintain Merge |
(ディメンション・サロゲート専用)マージされた値。( |
|
Maintain Move |
移動するディメンション値の位置。( |
リテラル |
表4-5 Maintainイベントによりトリガーされたプログラムがディメンション・ステータスに与える影響
イベントとサブイベント | プログラム実行前のディメンション・ステータス |
---|---|
Maintain Add |
ステータスは追加直後のディメンション値に設定される。 |
Maintain Delete |
ステータスは削除直前のディメンション値に設定される。 |
Maintain Delete All |
現行のステータスは変更されない。 |
Maintain Merge |
ステータスはマージ直後のディメンション値に設定される。 |
Maintain Move |
ステータスは移動直前のディメンション値に設定される。 |
Maintain Rename |
現行のステータスは変更されない。 |
OLAP DMLを使用してデータの集計、割当て、またはモデリングを実行するには、まず計算仕様の定義(「計算オブジェクトの作成」を参照)を行って、実行する計算の種類を指定します。後でデータベースのメンテナンス手順として集計、割当て、またはモデリングされた値を変数に移入する場合、計算オブジェクトを実行するプログラムを作成します。これらのプログラムで使用するOLAP DML文の詳細は、「モデルの実行」、「集計の実行」および「データの割当て」を参照してください。
OLAP DMLには、Geneva Forecastingエンジンを使用したデータの予測に関連する文がいくつか用意されています。Geneva Forecastingエンジンは、Roadmap Technologies社の統計予測エンジンであり、需要計画で広く利用されています。
Geneva Forecastingエンジンを使用して予測を行うには、次の手順を実行します。
将来の時間値を時間ディメンションに追加します。
予測の結果を保持するための変数を作成します。
予測プログラムを作成します。プログラムには、次の文を記載されているとおりの順に記述します。
FCOPENファンクション: 予測コンテキストを作成します。
FCSETコマンド: 予測の特性を指定します。
FCEXECコマンド: 予測を実行し、Oracle OLAP変数に予測データを移入します。
FCQUERYファンクション: 予測の特性または予測の試行に関する情報を取得します。
FCCLOSEコマンド: 予測コンテキストを閉じます。
これらの文を使用したデータ予測の実行例は、例9-118「予測プログラム」を参照してください。
ワークスペース全体、複数のワークスペース・オブジェクト、単一のワークスペース・オブジェクト、またはアナリティック・ワークスペース・オブジェクトの一部分を、特別な形式のEIFファイルにエクスポートできます。その後、同じスキーマまたは別のスキーマ内にある別のワークスペースに情報をインポートできます。
エクスポートおよびインポートを行う目的の1つは、データを新しい場所に移動することです。もう1つの目的は、多数のオブジェクトまたはディメンション値の追加と削除によって発生した不要な領域をアナリティック・ワークスペースから削除することです。これを行うには、EXPORT文を発行してすべてのデータをEIFファイルに出力し、別のワークスペースを異なる名前で作成した後、IMPORT文を使用してEIFファイルを新しいワークスペースにインポートします。同じデータベースにインポートした場合、古いワークスペースを削除して、古いワークスペースで使用していたのと同じワークスペース別名で新しいワークスペースを参照できます。
次の文は、現行のアナリティック・ワークスペースからmydir
というディレクトリ・オブジェクトにあるreorg.eif
というEIFファイルに、すべてのデータおよび定義をコピーします。
EXPORT ALL TO EIF FILE 'mydir/reorg.eif'