6 OLAP DMLプログラム
この章では、OLAP DMLプログラムの作成方法について説明します。次のトピックが含まれています:
6.1 OLAP DMLから提供されるプログラム
OLAP DMLでは、Oracle Databaseデータ・ディクショナリで事前に定義されたOLAPのキューブとキューブ・ディメンションの処理に使用できるプログラムが多数用意されています。これらのプログラムは、「キューブ対応のOLAP DML文」に記載されています。
また、アナリティック・ワークスペースを直接処理する次のプログラムも用意されています。
-
ALLCOMPILE。現行のアナリティック・ワークスペースにあるコンパイル可能なすべてのオブジェクトを1つずつコンパイルします。
-
ALLSTAT。現行のアナリティック・ワークスペースにあるすべてのディメンションのステータスを、ディメンションのデフォルトのステータス・リストに設定します。
-
AWDESCRIBEは、現行のアナリティック・ワークスペースに関する情報を、現行の出力ファイルに送信します。サマリー・ページの後にレポートが生成され、名前、型および説明を示すアナリティック・ワークスペース・オブジェクトのアルファベット順のリストと、オブジェクト型別に各オブジェクトのDESCRIBEの2つの部分が示されます。
-
COPYDFN。現行のワークスペースまたはアタッチされているワークスペース内の事前定義されたオブジェクトから定義をコピーして、アナリティック・ワークスペース内に新しいオブジェクトを定義します。
-
FORECAST.REPORTは、FORECASTコマンドを使用して作成される予測の標準レポートを生成します。レポートには、予測の計算式および平均絶対誤差率を含む予測のパラメータに続いて、予測値が示されます。
-
FULLDSC。1つ以上のワークスペース・オブジェクトに関して、そのプロパティおよびトリガーを含む定義を表示するレポートを生成します。
-
ISDATEは、テキスト式をDATE値に変換可能かどうかを判定します。テキスト式が有効な日付を表す場合はYESを返し、それ以外はNOを返します。(ISDATEは、実際には変換を実行しません。変換を実行するには、CONVERTを使用する必要があります。)
-
LISTBYは、指定した1つ以上のディメンションまたはコンポジットによってディメンション化されているか、それらに関連付けられている、アナリティック・ワークスペース内のすべてのオブジェクトの名前のレポートを生成します。LISTBYは、アタッチした任意のワークスペースのディメンションまたはコンポジットで使用できます。
-
LISTNAMESは、アナリティック・ワークスペース内のオブジェクトの名前をリストするレポートを生成します。リストの対象を特定の型のオブジェクトに制限し、各オブジェクト型の名前をアルファベット順にリストできます。
-
MODEL.COMPRPTは、モデルの方程式がどのようにブロックにグループ化されたかを示すレポートを生成します。このレポートでは、ディメンション間の依存があるステップ・ブロックおよび連立ブロックについて、依存に関与するディメンションがリストされます。
-
MODEL.DEPRTは、各モデル方程式が依存する変数およびディメンション値がリストされるレポートを生成します。ディメンションに依存している場合、レポートにはディメンションの名前が示されます。
-
MODEL.XEQRPTは、モデルの実行に関するレポートを生成します。レポートには、解決に失敗したブロックが示され、連立ブロックの解決に使用されたモデル・オプションの値が表示されます。
-
PAGEは通常、レポート・プログラム内で使用するか、またはLISTNAMESを指定して使用し、PAGINGの設定が
YES
である場合に、出力に改ページを挿入します。PAGEに対するオプションの引数は、ページの残りの行数を条件とする改ページを指定します。 -
REGRESS.REPORT。REGRESSコマンドを使用して実行した回帰の標準レポートを生成します。
-
STATUS。1つ以上のディメンション、ディメンション・サロゲートまたは値セットのステータス、あるいはアナリティック・ワークスペース内にあるすべてのディメンションのステータスを現行の出力ファイルに送信します。
-
STDHDR。レポート出力の各ページの上部にOracle OLAP標準ヘッダーを生成します。
-
VALSPERPAGEは、1ページに収める幅を指定する変数の値の最大数を計算します。ページとは、ワークスペース内の格納単位です。
ISDATEプログラムおよびVALSPERPAGEプログラムは単純なファンクションと同様なため、「OLAP DMLファンクション: AからK」および「OLAP DMLファンクション: LからZ」(アルファベット順)でOLAP DMLファンクションとともに説明しています。OLAP DMLから提供されるその他のプログラムについては、「OLAP DMLコマンド: AからG」および「OLAP DMLコマンド: HからZ」(アルファベット順)でOLAP DMLコマンドとともに説明しています。
6.2 OLAP DMLプログラムの作成
OLAP DMLプログラムは、OLAP DMLで記述します。プログラムはアナリティック・ワークスペースのデータ上で実行され、一部のワークスペース管理または分析タスクを行うときに有効です。OLAP DMLプログラムを作成し、アナリティック・ワークスペースで繰り返し行う必要のあるタスクを実行でき、開発中のアプリケーションの一部として作成することもできます。
OLAP DMLプログラムを作成するには、次の手順を実行します。
- DEFINE PROGRAM文を発行して、プログラム・オブジェクトを定義します。定義したプログラムがファンクションで使用される場合は、datatypeおよびdimension引数を含めます。
- 実行する処理を指定するための内容をプログラムに追加します(「プログラム内容の指定」を参照)。
- プログラムをコンパイルします(「プログラムのコンパイル」を参照)。
- プログラムをテストおよびデバッグします(「プログラムのテストとデバッグ」を参照)。
- プログラムを実行します(「プログラムの実行」を参照)。
6.3 プログラム内容の指定
プログラムの内容は、次のOLAP DML文で構成されます。
-
プログラム内容の始まりを示すPROGRAM文。(OLAP Worksheetの編集ウィンドウで仕様をコーディングする場合は不要です。)
-
(オプション)ローカル変数を定義するVARIABLE文。
-
(オプション)引数を宣言するARGUMENT文。(詳細は、「引数の受渡し」を参照してください。)
-
実行する処理を指定する付加的なOLAP DML文。プログラムでは、ほとんどすべてのOLAP DML文を使用できます。また、フロー制御文など、プログラムでのみ使用されるOLAP DML文もあります。
プログラムに行を追加する際は、次の書式設定ガイドラインを使用してください。
-
コードの各行は、最大4,000バイトです。
-
1つの文を次の行に続けるには、行の終わりにハイフン(
-
)を入力して改行します。ハイフンは、継続文字といいます。 -
テキスト・リテラルの途中では継続文字は使用できません。
-
1行に複数の文を記述するには、文をセミコロン(
;
)で区切ります。 -
リテラル・テキストは、一重引用符(
'
)で囲みます。リテラル・テキスト内に一重引用符を含めるには、引用符の前にバックスラッシュ(\
)を付けます。エスケープ・シーケンスの指定は、「エスケープ・シーケンス」を参照してください。 -
コメントの前には二重引用符(
"
)を付けます。行の先頭または末尾に、二重引用符を付けた文に関するコメントを付けることができます。
-
-
プログラムの内容の終わりを示す最後のEND文。(OLAP Worksheetの編集ウィンドウで仕様をコーディングする場合は不要です。)
6.3.1 ユーザー定義ファンクションの作成
一般に記述されるプログラムの1つのタイプとして、ユーザー定義ファンクションがあり、OLAP DMLファンクションを使用するのと同じ方法でOLAP DML文で使用できます。ユーザー定義ファンクションとは、単純に値を返すOLAP DMLプログラムのことです。ユーザー定義ファンクションの例は、例9-44を参照してください。
ユーザー定義ファンクションを作成する場合、datatypeおよびdimension引数を含むDEFINE PROGRAM文を使用します。プログラム内には、値を返すRETURN文があります。プログラムにおける戻り式は、その定義で指定されたデータ型と一致する必要があります。戻り値のデータ型が、その定義で指定されたデータ型と一致しない場合、その値は定義で指定されたデータ型に変換されます。
ユーザー定義ファンクションでは、引数を使用できます。ユーザー定義ファンクションは、単一の値のみを返します。しかし、ディメンションをループ処理するコンテキストでユーザー定義ファンクションに引数を指定する場合(たとえばREPORT文)、ファンクションはその引数と同じディメンションを持つ結果を返します。
プログラム内でARGUMENT文を使用して引数を宣言し、プログラムの名前の後にカッコで囲んだ引数を指定する必要があります。
関連項目:
プログラムにおける引数の使用の詳細は、「引数の受渡し」を参照してください。
6.3.2 引数の受渡し
ARGUMENT文を使用して、単純な引数と複雑な引数(式など)の両方を宣言できます。また、ARGUMENT文を使用すると、任意のデータ型、ディメンションまたは値セットの引数を宣言できるため、プログラムから別のプログラムに引数を渡したり、独自のユーザー定義ファンクションを作成することが容易になります。ARGUMENT文はすべて、プログラムの実行可能な最初の行の前に置く必要があります。プログラムを実行する際、それらの宣言された引数は、引数としてプログラムに指定した値で初期化されます。その後、プログラムはローカル変数を使用するのと同様にそれらの引数を使用できます。
6.3.2.1 複数の引数の使用
プログラムは、必要な数の引数を宣言できます。引数を指定してプログラムを実行する場合、その引数の順序はプログラムで宣言された引数の順序と一致します。プログラムを実行する際、カンマや他の記号ではなく空白で引数を区切る必要があります。記号は、引数の一部として扱われます。複数の引数を渡す例は、例9-45を参照してください
6.3.2.2 特定のデータ型への値の変換を行わない引数の処理
OLAP DMLプログラムが、値を特定のデータ型に変換せずに引数を処理するように指定することもできます。この場合、プログラムに引数および一時変数を定義するARGUMENT文とVARIABLE文に、WORKSHEET
のデータ型を指定できます。WKSDATAを使用すると、引数または変数の実際のデータ型を調べることができます。
6.3.2.3 アンパサンド置換によるテキスト引数の受渡し
ほとんどの場合は、単純なテキスト引数をプログラムに渡します。しかし、より汎用的なプログラムを作成したり、アナリティック・ワークスペース・オブジェクトの全データや式の結果など、より複雑なテキスト引数を渡したりする場合があります。このような場合、置換式を使用して引数を渡すことができます。このように引数を渡す方法を、アンパサンド置換といいます。
次のような引数では、常にアンパサンドを使用して適切な置換を行う必要があります。
-
ワークスペース・オブジェクトの名前(
units
やproduct
など) -
文のキーワード(REPORT
文における
COMMA
やNOCOMMA
、SORTコマンドにおけるA
やD
など)
アンパサンド置換を使用して、ワークスペース・オブジェクトの値でなく名前をプログラムに渡すと、プログラムではオブジェクト自体にアクセスできます。プログラムでオブジェクトを複数の操作において操作する必要がある場合、この機能は便利です。
注意:
アンパサンドを含むプログラム行のコンパイルおよび保存はできません。そのかわりに、その行は実行時に評価されますが、プログラムの実行速度が低下する場合があります。このため、パフォーマンスを最適化できるように、他の方法を使用できる場合はアンパサンド置換を使用しないでください。
アンパサンド置換を使用して複数のディメンション値を渡す例は、例10-18を参照してください。アンパサンド置換を使用して式のテキストを渡す例は、例9-47を参照してください。アンパサンド置換を使用してオブジェクト名およびキーワードを渡す例は、例9-48を参照してください。
関連項目:
アンパサンド置換の詳細は、「置換式」を参照してください。
6.3.3 プログラムのフロー制御
ほとんどのプログラミング言語と同様、OLAP DMLにはプログラム内におけるフロー制御の決定に使用可能な文が複数あります。ただし、多くのOLAP DML文が本来持っているループ特性のため、OLAP DMLプログラムでは明示的なループはできるだけコーディングしないでください。
次の表に、OLAP DMLのフロー制御文を示します。OLAP DML文のループ特性の詳細は、「すべてのデータ・オブジェクトの値に対するOLAP DML文の適用」を参照してください。
OLAP DMLには、一般のプログラミング言語の場合と同様のフロー制御文が含まれています。次の表に、これらの文を示します。
表6-1 フロー制御を決定する文
文 | 説明 |
---|---|
SWITCH、FORまたはWHILE文から、SWITCH、FORまたはWHILEに関連付けられたDOENDの直後の文にプログラム制御を移動する。 |
|
FORまたはWHILEループ処理の終わり(DO/DOEND文の直前)にプログラム制御を移動し、ループの繰返しを可能にする。CONTINUEは、プログラム内でのみ、またFORまたはWHILEと組み合せた場合にのみ使用可能。 |
|
1つ以上の文のグループをまとめる。DOおよびDOENDは通常、IF文によって指定される条件下で実行される文のグループ、FORまたはWHILEによって繰り返されるループ内の文のグループ、またはSWITCH文のCASEラベルをまとめるために使用される。 |
|
そのステータスが1つ以上の文の繰返しを制御する、1つ以上のディメンションを指定する。 |
|
実行する次のプログラム文を示すことにより、プログラム内の文の実行順序を変更する。 |
|
指定した条件に一致する場合に、プログラムの1つ以上の文を実行する。オプションで、条件に一致しない場合に、かわりになる文または文のグループを実行することも可能。 |
|
明示的なFORループでループ処理されるディメンションを制限するかどうかを決定するオプション。 |
|
最後の行に到達する前に、プログラムの実行を終了する。オプションで、プログラムが返す値を指定可能。 |
|
エラー・メッセージを生成し、プログラムの正常な実行を停止する。プログラムにアクティブなトラップ・ラベルがある場合、プログラムの実行はそのラベルに分岐する。トラップ・ラベルがない場合、プログラムの実行は終了し、そのプログラムが他のプログラムによりコールされていた場合は、コール側プログラムに実行制御が戻る。 |
|
プログラムに複数のパスを持つブランチを設定する。プログラムの実行中に使用される特定のパスは、SWITCHにより指定される制御式の値によって決まる。 |
|
FORループ内、またはREPORT文によって生成されるループ内で、ループ処理するディメンションを制限する。ステータスはTEMPSTATに続く文の実行後にリストアされる。DO ... DOEND句がTEMPSTATの後に続く場合、ステータスは、一致するDOENDか、BREAK文またはGOTO文が検出された時点でリストアされる。 |
|
プログラムでエラーが発生した場合、またはユーザーがプログラムを中断した場合に、プログラムの実行がラベルに分岐するようにする。実行がトラップ・ラベルに分岐した場合、そのトラップ・ラベルは非アクティブ化される。 |
|
ブール式の値がTRUEの間、文を繰り返し実行する。 |
6.3.4 環境設定の保存
次の2種類の環境があります。
6.3.4.1 プログラム環境の変更
プログラム内でタスクを実行するには、多くの場合、出力先または一部のディメンション値やオプション値を変更する必要があります。たとえば、常に最新の6か月の売上データを示す月間売上レポートを実行するとします。このとき、小数桁のないデータを表示して、売上高がゼロの場合はテキスト「No Sales」を表示し、レポートをファイルに送信します。このようなプログラム環境を設定するには、プログラムで次の文を使用します。
LIMIT month TO LAST 6 DECIMALS = 0 ZSPELL = 'No Sales' OUTFILE monsales.txt
セッション環境の混乱を避けるため、プログラムの初期化セクションで、プログラムに設定されるディメンションの値およびオプションの値を保存する必要があります。プログラム実行後に保存した環境をリストアできるため、他のプログラムの実行では、変更された値があるかどうかを確認する必要はありません。さらに、出力をファイルに送信した場合、終了セクションでは出力先をデフォルトの出力ファイルに戻す必要があります。
6.3.4.2 環境を保存およびリストアする方法
次の方法により、プログラムまたはセッションの環境を保存できます。
-
現行のプログラムで変更される現行のステータス、あるいはディメンション、値セット、オプションまたは単一セル変数の値を保存する場合は、PUSHLEVEL文およびPUSH文を使用します。POPLEVEL文およびPOP文を使用すると、現行のステータス値をリストアできます。
-
現行のセッションで使用する現行のステータス、あるいはディメンション、値セット、オプション、単一セル変数または単一セルのリレーションの値を保存、アクセスまたは更新する場合、名前付きコンテキストを使用します。コンテキストを定義するには、CONTEXTコマンドを使用します。
コンテキストは、セッション中に使用するオブジェクト値を保存するための最も高度な方法です。コンテキストを使用すると、保存したオブジェクト値にアクセス、更新およびコミットできます。一方、PUSHとPOPは、値の保存およびリストアのみを実行できます。プログラムの実行中にのみ適用される変更を加える場合は、通常、プログラム内でPUSH文およびPOP文を使用します。
6.3.4.3 ディメンションのステータスまたはオプションの値の保存
PUSH文は、ディメンションの現行のステータス、オプションの値または単一セル変数の値を保存します。たとえば、プログラムの継続期間中にDECIMALS
オプションの値に別の値を設定できるように、オプションの現行の値を保存するには、初期化セクションで次の文を使用します。
PUSH DECIMALS
オプションの値を保存またはその後でリストアするために、元の値を知っている必要はありません。保存した値は、POP文でリストアできます。
POP DECIMALS
プログラムが正常に終了した場合だけではなく、エラーの発生により異常終了した場合にも、POP文が実行されるようにする必要があります。そのために、POP文をプログラムの正常終了セクションと異常終了セクションに配置します。
6.3.4.5 レベル・マーカーの使用
複数のディメンションやオプションの値を保存する場合、セッション環境の保存およびリストアにはPUSHLEVEL文とPOPLEVEL文が有効です。
最初にPUSHLEVEL文を使用して、レベル・マーカーを設定します。レベル・マーカーを設定すると、PUSH文を使用することで、ディメンションのステータス、およびオプションまたは単一セル変数の値が保存されます。
PUSHLEVEL文とPOPLEVEL文の間に複数のPUSH文を配置する場合、それらのPUSH文で指定されたオブジェクトはすべて、1つのPOPLEVEL文でリストアされます。
PUSHLEVELおよびPOPLEVELを使用すると、オブジェクトのリストの入力が一度で済むので、プログラムを記述するときの入力を少なくすることができます。さらに、リストからオブジェクトが欠落したり、オブジェクトの名前のスペルを間違えるリスクを減らすこともできます。
レベル・マーカーの作成の例は、例10-85を参照してください例10-86では、PUSHLEVEL文およびPOPLEVEL文のネストについて解説します。
6.3.5 エラーの処理
プログラムのいずれかの場所でエラーが発生した場合、Oracle OLAPは次のアクションを実行します。
-
エラーの名前をERRORNAMEオプションに格納し、エラー・メッセージのテキストをERRORTEXTオプションに格納します。
注意:
ERRNAMESオプションがデフォルト値の
YES
に設定されている場合、ERRORTEXTオプションにはエラーの名前(ERRORNAMEオプションの値)およびエラー・メッセージのテキストが含まれます。 -
ECHOPROMPTが
YES
の場合、Oracle OLAPは入力行、エラー・メッセージおよび出力行を現行の出力ファイルにエコー出力します。OUTFILE文またはDBGOUTFILE文を使用すると、エラー・メッセージをファイルに記録できます。ファイルに出力を送信する例は、例10-69を参照してください。 -
エラー・トラップがオフの場合は、プログラムの実行は停止されます。エラー・トラップがオンの場合、エラーはトラップされます。
6.3.5.2 コール側プログラムへのエラーの受渡し
コール側のプログラムにエラーを渡すには、次に示す2つの方法のいずれかを使用できます。使用する方法は、エラー・メッセージを生成するタイミングによって異なります。最初の方法を使用した場合、エラー・メッセージはただちに生成され、その後エラー状態がプログラムの連鎖を経由して渡されます。2番目の方法を使用した場合は、エラーがプログラムの連鎖を経由して渡されてから、エラー・メッセージが生成されます。詳細は、「エラーの受渡し: 方法1」および「エラーの受渡し: 方法2」を参照してください。
どちらの方法の場合も、プログラムの連鎖内の各プログラムにおいて適切なエラー処理が実行され、ある時点でOracle OLAPから現行の出力ファイルへエラー・メッセージが送られます。
6.3.5.2.1 エラーの受渡し: 方法1
この方法を使用した場合、エラー・メッセージはただちに生成され、その後エラー状態がプログラムの連鎖を経由して渡されます。
TRAP文は、(デフォルトの)PRINTオプションと組み合せて使用します。エラーが発生すると、エラー・メッセージが生成され、実行はトラップ・ラベルに分岐します。トラップ・ラベル後は、内容を問わず必要なクリーンアップを実行し、次の文を実行します。
SIGNAL PRGERR
この文の使用によって、エラー条件が作成され、現行のプログラムの実行元であったプログラムにこのエラー条件が渡されます。ただし、PRGERRからはエラー・メッセージは生成されません。PRGERRでは、ERRORNAMEオプションが空白値に設定されます。
コール側のプログラムにトラップ・ラベルがある場合、プログラムの実行はそのラベルに分岐します。ネストしたプログラムの連鎖内の各プログラムがTRAPおよびSIGNALをこのように使用する場合は、プログラムの連鎖全体を経由してエラー状態を渡すことができます。
6.3.5.2.2 エラーの受渡し: 方法2
この方法を使用した場合は、エラーがプログラムの連鎖を経由して渡されてから、エラー・メッセージが生成されます。
TRAP文は、NOPRINTオプションと組み合せて使用します。エラーが発生すると、実行はトラップ・ラベルに分岐しますが、エラー・メッセージは表示されません。トラップ・ラベル後は、内容を問わず必要なクリーンアップを実行し、次の文を実行します。
SIGNAL ERRORNAME ERRORTEXT
オプションERRORNAMEおよびERRORTEXTには、元のエラーの名前とメッセージが記録されているので、このSIGNAL文を実行すると、元のエラーが再現されます。その後、このエラーは、現行のプログラムの実行元であったプログラムに渡されます。
コール側のプログラムにもトラップ・ラベルがある場合、プログラムの実行はそのラベルに分岐します。ネストしたプログラムの連鎖内の各プログラムがTRAP...NOPRINT
およびSIGNAL
ERRORNAME
ERRORTEXT
をこのように使用する場合は、プログラムの連鎖全体を経由してエラー状態を渡すことができます。Oracle OLAPでは、プログラムの連鎖の最後にエラー・メッセージを生成します。
エラー処理を実行するレベルに到達したときにアプリケーションを続行する場合は、SIGNAL文を省略します。独自のメッセージを表示するには、SHOW文を使用します。
6.3.5.3 エラー・メッセージの抑止
特定のエラーに対し、本来であれば生成されるエラー・メッセージが生成されないようにするには、次のようにTRAP文にNOPRINT
キーワードを使用します。
TRAP ON error NOPRINT
TRAP
コマンドでNOPRINT
キーワードを使用すると、制御はerror
ラベルに分岐し、エラーが発生した場合、エラー・メッセージは生成されません。その後、error
ラベルの後に続く文が実行されます。
エラー・メッセージを抑止する場合、異常終了セクションで独自のメッセージを生成できます。SHOW
文を使用すると、指定したテキストが生成されますが、エラーは通知されません。
TRAP ON error NOPRINT ... error: ... SHOW 'The report will not be produced.'
メッセージを生成した後、プログラムでは次の文が実行されます。
6.3.5.4 独自のエラー・メッセージの作成
文または文のシーケンスがその要件を満たしていない場合に発生するエラーはすべて、自動的に通知されます。作成するプログラムには、アプリケーション固有の要件を追加できます。要件を満たさない場合、SIGNAL
文を実行してエラーを通知できます。
エラーには任意の名前を付けることができます。SIGNAL
文を実行すると、OLAP DMLのエラー名が自動的に格納されるのと同様に、指定したエラー名がERRORNAME
オプションに格納されます。SIGNAL
文で独自のエラー・メッセージを指定すると、OLAP DMLのエラー・メッセージが生成されるのと同じように、独自のメッセージが生成されます。TRAP
文を使用してエラーをトラップする場合、エラー・メッセージが生成された後に、SIGNAL
文がTRAP
ラベルに分岐します。
エラーの通知の例は、例10-123を参照してください
エラー・ラベルに分岐せずに警告メッセージを生成する場合、SHOW
文を使用できます(例10-121を参照)。
6.3.5.5 ネストしたプログラムでのエラーの処理
ネストしたプログラムでエラーを処理する場合、各プログラムのエラー処理セクションで環境をリストアする必要があります。さらに、そのプログラムに特有の特別なエラー状態も処理できます。たとえば、プログラムが固有のエラーを通知する場合、そのエラーをテストする文を含めることができます。
ネストしたプログラムで発生したその他のエラーは、プログラムの連鎖を経由して渡され、各プログラムで処理されます。ネストしたプログラムの連鎖を経由してエラーを渡すには、エラー・メッセージを生成するタイミングに応じて、次に示す2つの方法のいずれかを使用できます。
-
エラー・メッセージがただちに生成され、その後にエラー状態がプログラムの連鎖を経由して渡されます(例10-157を参照)。
-
最初にエラーがプログラムの連鎖を経由して渡され、連鎖の最後にエラー・メッセージが生成されます(例10-158を参照)。
どちらの方法でもSIGNAL
文を使用します。
6.3.5.6 セッション環境の保存中のエラーの処理
セッション環境の保存中に発生するエラーを適切に処理するには、TRAP
文の前にPUSHLEVEL
文を、TRAP
文の後にPUSH
文を配置します。
PUSHLEVEL 'firstlevel' TRAP ON error PUSH ...
プログラムの異常終了セクションに、エラー・ラベル(後ろにコロンを入力)、およびセッション環境をリストアしてエラーを処理する文を配置します。異常終了セクションは、次のようになります。
error: POPLEVEL 'firstlevel' OUTFILE EOF
これらの文により、保存されたディメンション・ステータスおよびオプション値がリストアされ、出力をデフォルトの出力ファイルに再転送します。
6.4 プログラムのコンパイル
COMPILE
文を使用して、プログラムを明示的にコンパイルできます。プログラムを明示的にコンパイルしない場合、プログラムを最初に実行するときにコンパイルされます。
プログラムのコンパイル時、プログラム文は、効率的に処理されるコードに変換され、そのプログラムの元のテキストよりもはるかに高速に実行されます。プログラム内にエラーが検出された場合、コンパイルは完了せず、プログラムはコンパイルされていないと判断されます。
プログラムがコンパイルされると、現行のセッションでプログラムを実行するたびにコンパイルされたコードが使用されます。プログラムのコンパイル後にアナリティック・ワークスペースを更新およびコミットすると、コンパイルされたコードはアナリティック・ワークスペースに保存され、今後のセッションでプログラムを実行するために使用されます。このため、プログラムのコンパイル後に更新およびコミットを確実に行ってください。プログラムのコンパイル後に更新およびコミットを発行することは、そのプログラムが、多くのユーザーが実行しているアプリケーションの一部である場合は特に重要です。コンパイルされたプログラムがアナリティック・ワークスペースに保存されていない場合、プログラムは各ユーザー・セッションで個別に再コンパイルされます。
例9-69では、COMPILEを使用したプログラムのコンパイルについて解説します。
6.4.1 プログラムがコンパイルされたかどうかの確認
OBJ
ファンクションでISCOMPILED
オプションを使用すると、アナリティック・ワークスペース内の特定のプログラムが、最後に変更されてからコンパイルされたかどうかを判断できます。このファンクションは、ブール値を返します。
SHOW OBJ(ISCOMPILED 'myprogram')
6.5 プログラムのテストとデバッグ
作成したプログラムが正しくコンパイルされた場合でも、そのプログラムを実行してテストする必要があります。プログラムの実行は、アンパサンド置換を使用する文のエラー、ロジックのエラー、およびネストしたプログラムのエラーを検出するのに役立ちます。
プログラムを実行してテストするには、プログラムが処理する典型的なデータのフルセットをテスト・データとして使用します。エラー処理メカニズムを含むプログラムのすべての機能をテストしたことを確認するには、異なるデータおよび応答を使用し、プログラムを複数回実行します。次のようなテスト・データを使用します。
-
予想される範囲内のデータ
-
予想される範囲外のデータ
-
プログラムの各セクションを実行するデータ
6.5.1 診断メッセージの生成
プログラムを実行するたびに、プログラムがその文を正しい順序で実行し、出力が正しいことを確認する必要があります。作成したプログラムの実行を分析する手段として、プログラムにSHOW
文またはTRACE文を記述し、診断メッセージまたはステータス・メッセージを生成できます。テストの完了後に、これらの文を削除します。
プログラムやネストしたプログラムでエラーを検出した場合、またはエラーが発生する可能性がある場合は、この後に説明するデバッグ方法を使用して、エラーが発生する場所を特定できます。
6.5.2 不適切なコード行の識別
BADLINEオプションをYES
に設定すると、不適切なコード行が検出された場合、エラー・メッセージとともに追加情報が生成されます。エラーが発生すると、エラー・メッセージ、プログラムの名前、およびエラーを発生させたプログラム行が、現行の出力ファイルに送信されます。特定されたプログラムを編集してエラーを修正し、元のプログラムを実行できます。BADLINEの使用例は、例5-4を参照してください。
6.5.3 デバッグ・ファイルへの出力の送信
作成したプログラムにロジックのエラーがあっても、エラー・メッセージが表示されることなくそのプログラムが実行されることがありますが、実行される文または生成される結果は適切ではありません。たとえば、IF
文に不適切なブール式を記述する(EQ
のかわりにNE
を使用するなど)とします。プログラムは指定した文を実行しますが、不適切な条件で実行されます。
プログラム・ロジックのエラーを検出するには、多くの場合、文が実行される順序を調べる必要があります。その方法の1つとして、次に示すようにDML文を発行し、デバッグ・ファイルを作成してそのファイルを調べることにより、作成したプログラムの問題を診断します。
6.6 プログラムの実行
CALL文を使用すると、値を返さないプログラムを実行できます。引数はカッコで囲み、値により渡されます。たとえば、2つのINTEGER
値の和を計算する簡単なプログラムを作成し、addit
という名前を付けます。アプリケーションのメイン・プログラムでCALL文を使用し、そのプログラムを実行できます。
OLAP DML文を発行するのと同じ方法でプログラムを実行することもできます。ユーザー定義ファンクションは、組込みファンクションを使用するときと同じ方法で実行します。式でプログラム名を使用し、プログラム引数がある場合はカッコで囲みます。値を返さないプログラム(ユーザー定義コマンド)では、OLAP DMLコマンドと同じようにプログラム名を使用します。ユーザー定義プログラムをファンクションとして実行すると、そのプログラムの戻り値はNA
となります。
次のアクションがOracle OLAPで発生した場合に自動的に実行されるプログラムを作成することもできます。
-
AW ATTACHを実行する。AW CREATE、AW DELETE、AW DETACH、DEFINE、MAINTAIN、PROPERTY、UPDATEまたはSET文(「トリガー・プログラム」を参照)。
-
NA
値が検出される($NATRIGGERを参照)。
6.7 OLAP DMLプログラムの代表的なタイプ
この項では、次の種類のプログラムについて概説します。
6.7.1 起動プログラム
起動プログラムは、ユーザー自身が作成するプログラムで、AW ATTACH文の実行時、Oracle OLAPによってその名前がチェックされます。起動プログラムは、定義および作成しないかぎりアナリティック・ワークスペースには存在しません。起動プログラムでは、任意のOLAP DML文を実行でき、独自のプログラムも実行可能です。たとえば、起動プログラムにより、オプションをアプリケーションに適した値に設定できます。
最初にアナリティック・ワークスペースをアタッチするときに、Oracle OLAPでは、次の順序でOracle OLAP起動プログラムが検索され、実行されます(存在する場合)。
-
権限プログラム。権限プログラムの実行は、AW ATTACH文に指定したアタッチ・モード、およびアタッチしているアナリティック・ワークスペースに関連する権限プログラムが存在するかどうかによって決まります。詳細は、「権限プログラム」を参照してください。
-
ONATTACHプログラム。ONATTACHプログラムの実行は、AW ATTACH文のONATTACH句およびNOONATTACH句のコーディング方法、およびアタッチしているアナリティック・ワークスペースにONATTACHという名前のプログラムが存在するかどうかによって決まります。詳細は、「ONATTACHプログラム」を参照してください。
-
AUTOGOプログラム。AUTOGOプログラムの実行は、AW ATTACH文のAUTOGO句およびNOAUTOGO句のコーディング方法、およびアタッチしているアナリティック・ワークスペースにAUTOGOという名前のプログラムが存在するかどうかによって決まります。詳細は、「AUTOGOプログラム」を参照してください。
-
トリガー・プログラム。トリガー・プログラムの実行は、すでにアタッチしているアナリティック・ワークスペースにTRIGGER_AWという名前のプログラムが存在するかどうかによって決まります。アタッチしたアナリティック・ワークスペースの1つにTRIGGER_AWプログラムが存在する場合は、別のアナリティック・ワークスペースを作成、アタッチ、デタッチまたは削除すると、このプログラムが実行されます。詳細は、「トリガー・プログラム」およびTRIGGER_AWを参照してください。
注意:
セッション内では、次の点に注意します。
-
アタッチ済ワークスペースを再アタッチする場合、Oracle OLAPでは、権限プログラムおよびONATTACHプログラムの検索と実行を行いません。
-
すでにデタッチされているワークスペースを再アタッチする場合、そのワークスペースをNOCACHEキーワードを指定したAW DETACH文を使用してデタッチしている場合を除き、Oracle OLAPでは、権限プログラム、ONATTACHプログラムまたはAUTOGOプログラムの実行を行いません。
6.7.1.1 権限プログラム
権限プログラムは、管理者が作成するプログラムで、ワークスペースのデータにアクセスするアクセス権をユーザーに付与します。ユーザーが最初にアナリティック・ワークスペースをアタッチするときに、Oracle OLAPでは、アタッチ・モードに適した権限プログラムが存在するかどうかを確認します。
注意:
アタッチ済ワークスペースを再アタッチする場合、Oracle OLAPでは、権限プログラムの検索と実行を行いません。
アタッチ・モードごとの権限プログラムには、次の表に示されている特定の名前が必要です。
表6-2 様々なアタッチ・モードに対応する権限プログラムの名前
アタッチ・モード | プログラムの名前 |
---|---|
読取り専用 |
|
マルチライタ、読取り/書込み |
該当する権限プログラムが存在する場合は、Oracle OLAPによってそのプログラムが実行されます。アナリティック・ワークスペースをアタッチするときにユーザーがパスワードを指定すると、このパスワードは権限プログラムの処理に引数として渡されます。
注意:
ディメンション・サロゲートには、そのディメンションのアクセス権があります。そのディメンションのディメンション・サロゲートの値にアクセスするためにアクセス権を付与または拒否するには、そのディメンションに対してPERMITを使用します。
権限プログラムにより、プログラムが常駐するアナリティック・ワークスペースに対して2つのレベルのアクセス権が制御可能です。
-
アナリティック・ワークスペース・レベルでのアクセス: 権限プログラムの戻り値に応じて、アナリティック・ワークスペース全体へのアクセスがユーザーに許可されるかどうかが決定されます。この戻り値を使用すると、ユーザーがワークスペースをアタッチする権限を持っているかどうかをOracle OLAPに示すことができます。
-
オブジェクト・レベルでのアクセス: 読取り専用、または読取り/書込みアタッチの権限プログラム内でPERMIT文を指定すると、個々のワークスペース・オブジェクトへのアクセス権を許可または制限できます。PERMITプログラムは、PERMIT文の発行対象となるオブジェクトと同じワークスペースに存在する必要があります。
注意:
特定の権限プログラム内で参照されているすべてのオブジェクトは、同じアナリティック・ワークスペースに存在している必要があります。
権限プログラムを作成するには、認識可能な名前でユーザー定義ファンクション(「ユーザー定義ファンクションの作成」を参照)を定義し、プログラムの内容を定義します(「プログラム内容の指定」を参照)。
6.7.1.2 ONATTACHプログラム
ONATTACHプログラムには、名前を自由に付けることも、または明示的にONATTACH
という名前を付けることもできます。
注意:
アナリティック・ワークスペースがOLAP APIを使用してOLAPキューブとして作成されている場合、OLAP APIによってONATTACH
という名前のプログラムも作成されている場合があります。このように自動的に作成されたONATTACH
プログラムは変更できません。また、ONATTACH
の実行を無効にすることはお薦めしません。
したがって、アナリティック・ワークスペースにこのタイプのONATTACH
プログラムが存在する場合は、別のタイプの起動プログラムを作成して、アナリティック・ワークスペースがアタッチされているときに実行する動作を指定してください。
ONATTACHプログラムの実行を指定する方法は、その名前に応じて次のように異なります。
-
アナリティック・ワークスペースに
ONATTACH
という名前のプログラムが存在するときは、AW ATTACH文にNOOTTACHキーワードを指定した場合または別のプログラム名を指定するONATTACH句を記述した場合を除き、ワークスペースをアタッチするたびに、そのプログラムが自動的に実行されます。 -
ONATTACH
という名前の付いていないONATTACHプログラムを実行するには、AW ATTACH文のONATTACH句内にプログラムの名前を指定します。
注意:
キャッシュされたアタッチ済ワークスペースを再アタッチする場合、Oracle OLAPでは、ONATTACHプログラムの検索と実行を行いません。ワークスペースを再アタッチしたときにOracle OLAPでONATTACHプログラムの検索と実行が行われるように、強制的にアナリティック・ワークスペースを完全にデタッチするには、アナリティック・ワークスペースをデタッチするDETACH文でNOCACHEキーワードを指定します。
6.7.2 データのインポートおよびエクスポート・プログラム
6.7.2.1 リレーショナル表に対するデータのインポートおよびエクスポート
OLAP DMLのSQL文を使用して、SQL文をOLAP DMLプログラムに埋め込むことができます。OLAP DMLのSQL文を使用すると、リレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをインポートしたり、アナリティック・ワークスペース・オブジェクトからリレーショナル表にデータをエクスポートしたりできます。
6.7.2.1.1 リレーショナル表からワークスペース・オブジェクトへのデータのインポート
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を参照してください。
6.7.2.2 フラット・ファイルに対するデータのインポートおよびエクスポート
Oracle OLAPには、フラット・ファイルに対してデータの読取りや書込みを行うための文が複数用意されています。これらの文は、通常、特別なプログラムの中で組み合せて使用されます。
6.7.3 トリガー・プログラム
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文がプログラムの実行をトリガーする前にディメンション・ステータスを変更します。ほとんどの場合、トリガー・プログラムには選択した任意の名前を付けることができますが、一部のイベントには特定の名前のプログラムが必要です。「オブジェクト・トリガー・プログラムの特長」では、これらの特性について解説します。
関連項目:
次の説明を参照してください。
-
トリガーに関する情報を取得するTRIGGERファンクション、DESCRIBEコマンドおよびOBJファンクション
-
すべてのトリガーを無効にするときに使用可能なUSETRIGGERSオプション
6.7.3.2 オブジェクト・トリガー・プログラムの特長
オブジェクト・トリガー・プログラムには、それらをトリガーする文に応じていくつかの特長があります。トリガー・プログラムには、トリガーする文が実行される前に実行されるものと、後に実行されるものがあります。Oracle OLAPがプログラムに引数を渡すかどうかは、プログラムをトリガーする文によって決まります。Oracle OLAPは、ほとんどのトリガー・プログラムが実行されるまでディメンション・ステータスを変更しませんが、一部のMAINTAIN文がプログラムの実行をトリガーする前にディメンション・ステータスを変更します。ほとんどの場合、トリガー・プログラムには選択した任意の名前を付けることができますが、一部のイベントには特定の名前のプログラムが必要です。
表6-3には、プログラムをトリガーするOLAP DML文、プログラムの必須名(存在する場合)、Oracle OLAPがプログラムによる戻り値を使用するかどうか、Oracle OLAPがプログラムに引数を渡すかどうかが記載されています。
トリガー・プログラムの設計時には、次の点に注意してください。
-
DML文の前に実行されるトリガー・プログラム: トリガー側のOLAP DML文が実行される前に実行されるトリガー・プログラムの場合は、
BOOLEAN
値を返すユーザー定義ファンクションとしてトリガー・プログラムを定義できます。このプログラムによる戻り値は、トリガー・プログラムの実行をトリガーした文をOracle OLAPが実行するかどうかを決定します。プログラムの戻り値がFALSE
の場合、Oracle OLAPはトリガー側の文を実行しませんが、戻り値がTRUE
またはNA
の場合は、トリガー側の文が実行されます。 -
トリガー・プログラムに渡される引数: Oracle OLAPは、一部のトリガー・プログラムに引数を渡します。これらのプログラムは、表6-3に記載されています。また、引数の説明は、表6-4に記載されています。これらの引数をプログラム内で宣言するには、ARGUMENT文を使用します。値に対してプログラム変数を定義するには、VARIABLEを使用します。WKSDATAファンクションを使用して、
WORKSHEET
データ型で引数のデータ型を取得します。 -
Assignトリガー・プログラム: Oracle OLAPは、イベントが定義されたオブジェクトに値を代入するたびに、Assignイベントによってトリガーされるプログラムを実行します。このため、Assignイベントでトリガーされるプログラムは通常、代入文がオブジェクトをループ処理して値を代入するときに繰り返し実行されます。これが実行されるたびに、代入される値は、引数1としてAssignトリガー・プログラムに渡されます。(詳細は、表6-4を、例については例10-163を参照。)Assignトリガー・プログラムの中でTRIGGER ASSIGN文を使用して、Assignトリガー・プログラムの実行をトリガーした代入文によって指定される値とは別の値を代入できます。
計算式に値を代入できるのは、その計算式にAssignトリガーが定義されている場合のみです。Assignイベントを持つ計算式に値を代入すると、Oracle OLAPは、代入された値のイベントに対してトリガー・プログラムを実行し、代入された値をトリガー・プログラムに渡します。Assignトリガーは、計算式自体の定義は変更
しません
。計算式に関するAssignトリガーの例は、例10-165を参照してください。 -
Maintainトリガー・プログラムとディメンション・ステータス: Maintainイベントがプログラムの実行をトリガーすると、Oracle OLAPは、メンテナンスの対象になっているディメンションのステータスを変更する場合があります。詳細は、表6-5を参照。
-
Maintainトリガーとディメンション・サロゲート: ディメンション・サロゲートのMaintainトリガーは、その他のオブジェクトのMaintainトリガーとは異なります。ディメンション・サロゲートに対してMAINTAIN文を正常に発行できるのは、ディメンション・サロゲートにMaintainトリガーが存在する場合のみです。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。さらに、Maintain AddトリガーやMaintain Mergeトリガーの場合も、引数がプログラムに渡されるかどうかは、次のようにトリガーが定義されるオブジェクトによって決まります。
-
Maintainトリガーを持つディメンション・サロゲートの場合、Oracle OLAPは、値が追加またはマージされるたびにトリガー・プログラムを1回実行し、値をプログラムに渡します。
-
Maintainトリガーを持つその他のオブジェクトの場合、Oracle OLAPが実行するトリガー・プログラムはMAINTAIN文の実行後1回のみであり、プログラムに値は渡されません。
-
表6-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) |
必須名なし |
なし |
なし |
表6-4 トリガー・プログラムに渡される引数
イベント | Argument1 | Argument2 |
---|---|---|
プロパティ |
PROPERTY文によってプロパティがオブジェクトに割り当てられている場合は、プロパティの名前。PROPERTY文によって1つ以上のプロパティが削除される場合は、リテラル |
引数1の値が |
代入 |
代入する値。値の代入先となるオブジェクトのデータ型がわかったら、そのデータ型を引数に指定する。実際のデータ型がわからない場合は、引数のデータ型として |
なしOracle OLAPからプログラムに渡される引数は1つのみ。 |
Maintain Add |
(ディメンション・サロゲート専用)追加された値。( |
|
Maintain Rename |
名前変更の対象となるディメンション値。( |
ディメンション・メンバーの新しい名前。( |
Maintain Merge |
(ディメンション・サロゲート専用)マージされた値。( |
|
Maintain Move |
移動するディメンション値の位置。( |
リテラル |
表6-5 Maintainイベントによりトリガーされたプログラムがディメンション・ステータスに与える影響
イベントとサブイベント | プログラム実行前のディメンション・ステータス |
---|---|
Maintain Add |
ステータスは追加直後のディメンション値に設定される。 |
Maintain Delete |
ステータスは削除直前のディメンション値に設定される。 |
Maintain Delete All |
現行のステータスは変更されない。 |
Maintain Merge |
ステータスはマージ直後のディメンション値に設定される。 |
Maintain Move |
ステータスは移動直前のディメンション値に設定される。 |
Maintain Rename |
現行のステータスは変更されない。 |
6.7.4 集計、割当て、およびモデリングのプログラム
OLAP DMLを使用してデータの集計、割当て、またはモデリングを実行するには、まず計算仕様の定義(「計算オブジェクトの作成」を参照)を行って、実行する計算の種類を指定します。後でデータベースのメンテナンス手順として集計、割当て、またはモデリングされた値を変数に移入するには、計算オブジェクトを実行するプログラムを作成します。これらのプログラムで使用するOLAP DML文の詳細は、「モデルの実行」、「集計の実行」および「データの割当て」を参照してください。
6.7.5 予測プログラム
OLAP DMLには、Geneva Forecastingエンジンを使用したデータの予測に関連する文がいくつか用意されています。Geneva Forecastingエンジンは、Roadmap Technologies社の統計予測エンジンであり、需要計画で広く利用されています。
Geneva Forecastingエンジンを使用して予測を行うには、次の手順を実行します。
-
将来の時間値を時間ディメンションに追加します。
-
予測の結果を保持するための変数を作成します。
-
予測プログラムを作成します。プログラムには、次の文を記載されているとおりの順に記述します。
-
FCOPENファンクション: 予測コンテキストを作成します。
-
FCSETコマンド: 予測の特性を指定します。
-
FCEXECコマンド: 予測を実行し、Oracle OLAP変数に予測データを移入します。
-
FCQUERYファンクション: 予測の特性または予測の試行に関する情報を取得します。
-
FCCLOSEコマンド: 予測コンテキストを閉じます。
-
これらの文を使用したデータ予測の実行例は、例9-119を参照してください。
6.7.6 ワークスペース・オブジェクトをエクスポートおよびインポートするプログラム
ワークスペース全体、複数のワークスペース・オブジェクト、単一のワークスペース・オブジェクト、またはアナリティック・ワークスペース・オブジェクトの一部分を、特別な形式のEIFファイルにエクスポートできます。その後、同じスキーマまたは別のスキーマ内にある別のワークスペースに情報をインポートできます。
エクスポートおよびインポートを行う目的の1つは、データを新しい場所に移動することです。もう1つの目的は、多数のオブジェクトまたはディメンション値の追加と削除によって発生した不要な領域をアナリティック・ワークスペースから削除することです。これを行うには、EXPORT文を発行してすべてのデータをEIFファイルに出力し、別のワークスペースを異なる名前で作成した後、IMPORT文を使用してEIFファイルを新しいワークスペースにインポートします。同じデータベースにインポートした場合、古いワークスペースを削除して、古いワークスペースで使用していたのと同じワークスペース別名で新しいワークスペースを参照できます。
次の文は、現行のアナリティック・ワークスペースからmydir
というディレクトリ・オブジェクトにあるreorg.eif
というEIFファイルに、すべてのデータおよび定義をコピーします。
EXPORT ALL TO EIF FILE 'mydir/reorg.eif'
6.8 Oracle OLAPによって検索されるユーザー作成のプログラム
Oracle OLAPでは、次の名前を持つOracle OLAPプログラムが検索され、各プログラムに関する項で説明されているとおりに実行されます。
6.8.1 AUTOGO
AUTOGOプログラムは、ユーザーが作成できるプログラムであり、AW ATTACHコマンドの実行時には、Oracle OLAPによってその名前の確認が行われます。
AUTOGOというプログラムを含むアナリティック・ワークスペースをアタッチすると、AW ATTACH文にNOAUTOGO句を指定した場合または別の名前のプログラムを指定するAUTOGO句を記述した場合を除き、Oracle OLAPによってONATTACHプログラムが実行されます。
注意:
ユーザーがアナリティック・ワークスペースをアタッチすると、Oracle OLAPではこのプログラムとその他のプログラムの有無が確認されます。詳細は、「起動プログラム」を参照してください。
戻り値
BOOLEAN
Oracle OLAPがアナリティック・ワークスペースを正常に設定してアタッチした場合はTRUE
、そうでない場合およびAUTOGOプログラムに例外が発生した場合はFALSE
です。
注意:
戻り値としてFALSE
を発生させるために例外に依存せずに、正常な戻り値を使用することをお薦めします。
構文
AUTOGO
という名前のプログラムを定義するには、DEFINE PROGRAMに示す構文を使用します。実際のプログラムは、次の引数を持つユーザー定義ファンクションとしてコーディングします。
AUTOGO (password)
パラメータ
passwordの詳細は、AW ATTACHを参照してください。
例
アタッチ・プログラムの動作例は、例9-50を参照してください。
6.8.2 ONATTACH
ONATTACHプログラムは、ユーザーが作成できるプログラムであり、AW ATTACHコマンドの実行時には、Oracle OLAPによってその名前の確認が行われます。
ONATTACHというプログラムを含むアナリティック・ワークスペースをアタッチすると、AW ATTACH文にNOONATTACH句を指定した場合または別の名前のプログラムを指定するONATTACH句を記述した場合を除き、Oracle OLAPによってONATTACHプログラムが実行されます。
onattach
プログラム内の文に応じて、特定のオブジェクトまたはオブジェクト値のセットに対するユーザーのアクセスが許可される場合と拒否される場合とがあります。マルチライタ・モードでのアタッチでは、ACQUIREコマンドを使用して個々のワークスペース・オブジェクトにアクセスできます。読取り専用モードおよび読取り/書込みモードでのアタッチでは、個々のワークスペース・オブジェクトへのアクセスを許可または制限するPERMITコマンドを使用できます。特定のonattach
プログラム内で参照されるすべてのオブジェクトは、同じアナリティック・ワークスペース内に存在する必要があります。
注意:
ユーザーがアナリティック・ワークスペースをアタッチすると、Oracle OLAPではこのプログラムとその他のプログラムの有無が確認されます。詳細は、「起動プログラム」を参照してください。
戻り値
BOOLEAN
Oracle OLAPがアナリティック・ワークスペースを正常に設定してアタッチした場合はTRUE
、そうでない場合およびonattach
プログラムに例外が発生した場合はFALSE
です。
注意:
戻り値としてFALSE
を発生させるために例外に依存せずに、正常な戻り値を使用することをお薦めします。
構文
ONATTACH
という名前のプログラムを定義するには、DEFINE PROGRAMに示す構文を使用します。実際のプログラムは、次の引数を持つユーザー定義ファンクションとしてコーディングします。
ONATTACH ({READ|WRITE|EXCLUSIVE|MULTI} password)
パラメータ
アタッチ・モード(READ、WRITE、EXCLUSIVE、MULTI)およびpasswordの説明は、AW ATTACHを参照してください。
使用上の注意
OLAP APIによって作成されたONATTACHプログラム
アナリティック・ワークスペースがOLAP APIを使用してOLAPキューブとして作成されている場合、OLAP APIによってONATTACHという名前のプログラムが作成されている場合もあります。このように自動的に作成されたONATTACHプログラムは変更できません。また、このONATTACHの実行を無効にすることはお薦めしません。
したがって、アナリティック・ワークスペースにこのタイプのONATTACHプログラムが存在する場合は、別のタイプの起動プログラムを作成して、アナリティック・ワークスペースがアタッチされているときに実行する動作を指定してください。
例
アタッチ・プログラムの動作例は、例9-50を参照してください。
6.8.3 ONDETACH
ONDETACHプログラムは、ユーザーが作成できるプログラムであり、AW DETACHコマンドの実行時には、Oracle OLAPによってその名前の確認が行われます。さらにOracle OLAPでは、プログラムからの戻り値に応じて、アナリティック・ワークスペースがデタッチされた直後にプログラム内のコードが実行されます。
注意:
ユーザーがアナリティック・ワークスペースをアタッチすると、Oracle OLAPではその他のプログラムの有無が確認されます。詳細は、「起動プログラム」を参照してください。
戻り値
BOOLEAN
Oracle OLAPにおいてアナリティック・ワークスペースのデタッチが正常に行われた場合はTRUE
、そうでない場合およびdetach
プログラムに例外が発生した場合はFALSE
です。
注意:
戻り値としてFALSE
を発生させるために例外に依存せずに、正常な戻り値を使用することをお薦めします。
構文
ONDETACH
という名前のプログラムを定義するには、DEFINE PROGRAMに示す構文を使用します。
6.8.4 PERMIT_READ
PERMIT_READプログラムは、ユーザーが作成できるプログラムであり、AW ATTACH読取り専用コマンドの実行時には、Oracle OLAPによりその名前の確認が行われます。プログラムからの戻り値に応じて、Oracle OLAPは、アナリティック・ワークスペースのアタッチ後にプログラム内部のコードを実行します。permit_read
プログラム内の文に応じて、特定のオブジェクトまたはオブジェクト値のセットに対するユーザーのアクセスが許可される場合と拒否される場合とがあります。permit_read
プログラム内では、個々のワークスペース・オブジェクトへのアクセス権を付与または制限するPERMITコマンドを指定できます。特定のpermit_read
プログラム内で参照されるすべてのオブジェクトは、同じアナリティック・ワークスペース内に存在する必要があります。
注意:
ユーザーがアナリティック・ワークスペースをアタッチすると、Oracle OLAPではこのプログラムとその他のプログラムの有無が確認されます。詳細は、「起動プログラム」を参照してください。
関連項目:
PERMITERRORオプション、PERMITREADERRORオプションおよびPERMIT_WRITEプログラム
戻り値
BOOLEAN
Oracle OLAPがアナリティック・ワークスペースを正常に設定してアタッチした場合はTRUE
、そうでない場合およびpermit_read
プログラムに例外が発生した場合はFALSE
です。
注意:
戻り値としてFALSE
を発生させるために例外に依存せずに、正常な戻り値を使用することをお薦めします。
構文
PERMIT_READ
という名前のプログラムを定義するには、DEFINE PROGRAMに示す構文を使用します。実際のプログラムは、次の引数を持つユーザー定義ファンクションとしてコーディングします。
PERMIT_READ (password)
パラメータ
passwordの詳細は、AW ATTACHを参照してください。アナリティック・ワークスペースのアタッチ時にユーザーがパスワードを指定すると、そのパスワードはプログラムへの引数として渡されて処理されます。
例
アナリティック・ワークスペースがアタッチされるときに権限プログラムが実行される順序については、例9-50を参照してください。
6.8.5 PERMIT_WRITE
PERMIT_WRITEプログラムは、ユーザーが作成できるプログラムであり、AW ATTACH読取り/書込みコマンドの実行時には、Oracle OLAPによりその名前の確認が行われます。プログラムからの戻り値に応じて、Oracle OLAPは、アナリティック・ワークスペースのアタッチ後にプログラム内部のコードを実行します。permit_write
プログラム内の文に応じて、特定のオブジェクトまたはオブジェクト値のセットに対するユーザーのアクセスが許可される場合と拒否される場合とがあります。permit_write
プログラム内では、個々のワークスペース・オブジェクトへのアクセス権を付与または制限するPERMITコマンドを指定できます。特定のpermit_write
プログラム内で参照されるすべてのオブジェクトは、同じアナリティック・ワークスペース内に存在する必要があります。
注意:
ユーザーがアナリティック・ワークスペースをアタッチすると、Oracle OLAPではこのプログラムとその他のプログラムの有無が確認されます。詳細は、「起動プログラム」を参照してください。
関連項目:
PERMITERRORオプション、PERMITREADERRORオプションおよびPERMIT_READプログラム
戻り値
BOOLEAN
Oracle OLAPがアナリティック・ワークスペースを正常に設定してアタッチした場合はTRUE
、そうでない場合およびpermit_write
プログラムに例外が発生した場合はFALSE
です。
注意:
戻り値としてFALSE
を発生させるために例外に依存せずに、正常な戻り値を使用することをお薦めします。
構文
PERMIT_WRITE
という名前のプログラムを定義するには、DEFINE PROGRAMに示す構文を使用します。実際のプログラムは、次の引数を持つユーザー定義ファンクションとしてコーディングします。
PERMIT_WRITE (password)
パラメータ
passwordの詳細は、AW ATTACHを参照してください。アナリティック・ワークスペースのアタッチ時にユーザーがパスワードを指定すると、そのパスワードはプログラムへの引数として渡されて処理されます。
例
アナリティック・ワークスペースがアタッチされるときに権限プログラムが実行される順序については、例9-50を参照してください。
6.8.6 TRIGGER_AFTER_UPDATE
TRIGGER_AFTER_UPDATEプログラムは、ユーザーが作成できるプログラムであり、アナリティック・ワークスペースに対するUPDATEコマンドの実行時には、Oracle OLAPによって名前の確認が行われます。このプログラムは、更新中のアナリティック・ワークスペースと同じワークスペースに存在する場合、UPDATEの実行後に実行されます。
注意:
TRIGGER_AFTER_UPDATEプログラムを実行するには、USETRIGGERSオプションをそのデフォルト値であるTRUE
に設定する必要があります。
注意:
「トリガー・プログラム」。
構文
TRIGGER_AFTER_UPDATE
という名前のプログラムを作成するには、「トリガー・プログラム」で示すガイドラインに従います。
例
例6-1 TRIGGER_AFTER_UPDATEプログラム
アナリティック・ワークスペースで次のようにプログラムを定義したとします。
DEFINE TRIGGER_AFTER_UPDATE PROGRAM PROGRAM SHOW JOINCHARS ('calltype = ' CALLTYPE) SHOW JOINCHARS ('triggering event = ' TRIGGER(EVENT)) SHOW JOINCHARS ('triggering subevent = ' TRIGGER(SUBEVENT)) END
UPDATE文を発行すると、このプログラムが実行され、次の出力が表示されます。
calltype = TRIGGER triggering event = AFTER_UPDATE triggering subevent = AW
6.8.7 TRIGGER_AW
TRIGGER_AWプログラムは、アナリティック・ワークスペース内でユーザーが作成できるプログラムです。そのアナリティック・ワークスペースが現行のアナリティック・ワークスペースであり、かつ別のアナリティック・ワークスペースを作成、アタッチ、デタッチまたは削除した場合には、Oracle OLAPによってその名前の確認が行われます。
注意:
ユーザーがアナリティック・ワークスペースをアタッチすると、Oracle OLAPではこのプログラムとその他のプログラムの有無が確認されます。詳細は、「起動プログラム」を参照してください。
関連項目:
戻り値
なし
構文
TRIGGER_AW
という名前のプログラムは、「TRIGGER_AWプログラムの作成方法」に示すガイドラインに従って作成します。
使用上の注意
TRIGGER_AWプログラムの作成方法
TRIGGER_AWプログラムは、次の手順に従って作成します。
-
プログラムを定義します(DEFINE PROGRAMを参照)。
-
プログラムの名前としてTRIGGER_AWを指定します。
-
プログラムを実際にコーディングします(「プログラム内容の指定」を参照)。
注意:
再帰的トリガーはサポートされていません。TRIGGER_AWプログラムの内部でAW文を発行する場合は、その前にUSETRIGGERSオプションを
NO
に設定しておく必要があります。
例
例6-2 TRIGGER_AWプログラム
my_aw
という名前のアナリティック・ワークスペースに、次の定義を持つプログラムが定義されているとします。
DEFINE TRIGGER_AW PROGRAM PROGRAM SHOW CALLTYPE SHOW TRIGGER(EVENT) SHOW TRIGGER(SUBEVENT) SHOW TRIGGER(NAME) END
my_aw
ワークスペースをアタッチすると、指定された値が表示されます。
AW ATTACH MY_AW TRIGGER AW ATTACH MY_AW
6.8.8 TRIGGER_BEFORE_UPDATE
TRIGGER_BEFORE_UPDATEプログラムは、ユーザーが作成できるプログラムであり、UPDATEコマンドの実行時には、Oracle OLAPによって名前の確認が行われます。このプログラムは、更新中のアナリティック・ワークスペースと同じワークスペースに存在する場合にOracle OLAPによって実行され、プログラムの戻り値(存在する場合)に応じて、ワークスペースが更新される場合とされない場合があります。
注意:
TRIGGER_BEFORE_UPDATEプログラムを実行するには、USETRIGGERSオプションをそのデフォルト値であるTRUE
に設定する必要があります。
注意:
戻り値
プログラムは、BOOLEAN
値を返すファンクションとして作成できます。この場合には、プログラムからの戻り値がFALSEのとき、TRIGGER_BEFORE_UPDATEプログラムの実行をトリガーしたUPDATE文は実行されず、プログラムからの戻り値がTRUE
またはNA
のときは、UPDATE文が実行されます。
構文
TRIGGER_UPDATE
という名前のプログラムを作成するには、「トリガー・プログラム」で示すガイドラインに従います。
例
例6-3 TRIGGER_BEFORE_UPDATEプログラム
myaw
というアナリティック・ワークスペースに、次の定義を持つTRIGGER_BEFORE_UPDATEプログラムが存在するとします。
DEFINE TRIGGER_BEFORE_UPDATE PROGRAM BOOLEAN PROGRAM SHOW JOINCHARS ('calltype = ' CALLTYPE) SHOW JOINCHARS ('triggering event = ' TRIGGER(EVENT)) SHOW JOINCHARS ('triggering subevent = ' TRIGGER(SUBEVENT)) RETURN TRUE END
myvar
というTEXT
変数を定義して、UPDATE文を発行するとします。TRIGGER_BEFORE_UPDSATEプログラムが実行されます。
calltype = TRIGGER triggering event = BEFORE_UPDATE triggering subevent = AW
このプログラムからの戻り値はTRUEであるため、myvar
の定義は、ワークスペースをデタッチして再アタッチした後にも存在します。
AW DETACH myaw AW ATTACH myaw DESCRIBE DEFINE TRIGGER_BEFORE_UPDATE PROGRAM BOOLEAN PROGRAM SHOW JOINCHARS ('calltype = ' CALLTYPE) SHOW JOINCHARS ('triggering event = ' TRIGGER(EVENT)) SHOW JOINCHARS ('triggering subevent = ' TRIGGER(SUBEVENT)) RETURN TRUE END DEFINE MYVAR VARIABLE TEXT
ただし、プログラムからの戻り値がFALSE
になるようにプログラムを変更した場合は、ワークスペースのデタッチと再アタッチを実行すると、myvar
の定義がワークスペース内に存在しなくなるだけでなく、TRIGGER_BEFORE_UPDATEプログラムの定義もワークスペース内に存在しなくなります。
6.8.9 TRIGGER_DEFINE
TRIGGER_DEFINEプログラムは、ユーザーが作成するプログラムであり、DEFINEコマンドの実行時には、Oracle OLAPによって名前の確認が行われます。このプログラムは、新しいオブジェクトを定義するアナリティック・ワークスペースと同じワークスペースに存在する場合に実行されます。
注意:
TRIGGER_DEFINEプログラムを実行するには、USETRIGGERSオプションをそのデフォルト値であるTRUE
に設定する必要があります。
注意:
構文
TRIGGER_DEFINE
という名前のプログラムを作成するには、「トリガー・プログラム」で示すガイドラインに従います。
例
例6-4 TRIGGER_DEFINEプログラム
次のような記述を持つTRIGGER_DEFINEプログラムをアナリティック・ワークスペースに作成したとします。
DEFINE TRIGGER_DEFINE PROGRAM PROGRAM SHOW JOINCHARS ('calltype = ' CALLTYPE) SHOW JOINCHARS ('triggering event = ' TRIGGER(EVENT)) SHOW JOINCHARS ('fully qualified object name ='TRIGGER(NAME)) SHOW JOINCHARS ('type of object = 'OBJ(TYPE TRIGGER(NAME)) DESCRIBE &TRIGGER(NAME) END
次の文に示すように、DEFINE VARIABLE文を発行して、myvar
という変数を定義したとします。この文の後の出力に示すように、Oracle OLAPはこの変数を定義して、TRIGGER_DEFINEプログラムを実行します。
DEFINE myvar VARIABLE TEXT calltype = TRIGGER triggering event = DEFINE fully qualified object name =MYAW!MYVAR type of object = VARIABLE DEFINE MYVAR VARIABLE TEXT