ヘッダーをスキップ
Oracle® OLAP DMLリファレンス
11gリリース2 (11.2)
B61346-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

COMPILE

COMPILEコマンドは、プログラム、計算式、モデル、aggmapなどのコンパイル可能なオブジェクトのためのコンパイル済コードを、オブジェクトを実行することなく生成し、アナリティック・ワークスペースに保存するコマンドです。COMPILEの実行では、コンパイル時にフォーマット・エラーのチェックが行われるため、コードを実行する前のデバッグとしても使用できます。COMPILEは、現行の出力ファイルにエラーを記録します。

ただし、コンパイル可能なオブジェクトを実行する前に必ずしもCOMPILEコマンドを使用する必要はありません。COMPILEを使用しなくても、コンパイル可能なオブジェクトのコンテンツが入力または変更された後に最初にオブジェクトを実行する際、Oracle OLAPが自動でそれらのオブジェクトをコンパイルします。ユーザーは、処理のために応答時間がわずかに遅延することを除いて、この自動コンパイルにはほとんど気付きません。コンパイル可能なオブジェクトのコンパイル・ステータスについての情報を取得するには、ISCOMPILEDキーワードとともにOBJファンクションを使用します。

COMPILEを使用してオブジェクトを明示的にコンパイルするか、オブジェクトを実行することで自動で行うかにかかわらず、その後、同じセッションでオブジェクトを実行する際は、コードがすでにコンパイルされているため、常にコードの実行はより迅速になります。アナリティック・ワークスペースを更新およびコミットすると、コンパイル済のコードがアナリティック・ワークスペースの一部として保存され、その後のセッションで使用できます。そのため、その後のセッションでは、最初に実行するときにコードの実行が高速になります。

COMPILEを使用して、コンパイル可能なオブジェクトを実行せずにコードをコンパイルすることは、読取り専用のアナリティック・ワークスペース(使用はできるが、更新できないアナリティック・ワークスペース)の一部となるコードを記述している場合、特に有用です。

構文

COMPILE object-name

パラメータ

object-name

コンパイルの対象とする、コンパイル可能なオブジェクトの名前。

使用上の注意

コンパイル・オプション

コンパイルにはいくつかのオプションがあります。これらのオプションは、「コンパイル・オプション」に記載されています。これらのオプションのうち1つ以上を設定することにより、コンパイル時のエラー・メッセージを非表示にしたり、THIS_AWの一致文字列を指定した値に置換したりできます。

削除されたオブジェクト

アナリティック・ワークスペースでオブジェクトを削除するか、オブジェクトの名前を変更すると、Oracle OLAPにより、プログラム内のすべての文と、そのオブジェクトに依存するすべての計算式およびモデルについてのコンパイル済コードが自動的に無効化されます。削除されたか名前が変更されたオブジェクトを参照するコードを実行すると、Oracle OLAPがコードの再コンパイルを試行します。同じ名前で新しいオブジェクトが定義されていないかぎり、この時点でエラー・メッセージが表示されます。

無効化されたコードを含むプログラムを実行すると、1回に1つの文がコンパイルされ、実行されます。プログラム全体のコンパイル済コードを保存するには、COMPILEコマンドを使用して明示的にコンパイルします。

同一行内での複数のエラー

単一の文に複数のエラーがある場合、COMPILEが検出するのは最初のエラーのみです。ただし、後続の文のフォーマット・エラーのチェックは続行されます。

宣言エラー

COMPILEでは、プログラムやモデルの宣言エラーを別々に処理します。

  • プログラムに宣言エラーがある場合(実行可能コードの後にVARIABLEまたはARG文が続く場合など)、COMPILEによりトラップ可能エラーが通知されます。

  • モデルに宣言エラーがある場合(MODEL文内のDIMENSION文が代入文の後に続く場合など)は、トラップ可能エラーは通知されません。そのかわり、そのモデルは実行できません。

トラップ可能エラーの詳細は、TRAPコマンドを参照してください。

コンパイルの優位点

COMPILEコマンドを使用する明示的なコンパイルには、自動コンパイルと比較した場合、次のようなメリットがあります。

  • コンパイル可能なすべてのオブジェクトについて、COMPILEでは、オブジェクト内でコードを実行することなくコンパイル済コードを生成できます。

  • プログラムまたはモデルでは、自動コンパイルが診断するのは、エラーを含む最初の文の1つのエラーのみです。その後、エラー・メッセージが表示され、プログラムの実行またはモデルの解析が中止されます。そのため、プログラムまたはモデルを自動でコンパイルするたびに、1つのエラー・メッセージのみが表示されることになります。それに対し、COMPILEでは、プログラムまたはモデルのすべての文についてフォーマットが正しいかどうかをチェックし、複数のエラー・メッセージ(エラーを含む文ごとに1つのメッセージ)を生成します。(プログラムでは、一部のタイプの文はコンパイルできないため、それらは例外です。「COMPILEでは検出されないエラー」を参照)。COMPILEでは、少なくとも1つのエラーを含む文がすべて検出されるため、すべてのエラーを修正するまでのコードの編集回数が最小限になります。

  • モデルでは、モデルの実行前に、コンパイルの結果を検証したり、連立方程式を処理するオプションを設定する必要がある場合があります。

COMPILEでは検出されないエラー

COMPILEコマンドではコードは実際に実行されないため、オブジェクトを実際に実行してみると正常に実行されないコードもコンパイルされる可能性があるのですが、これは、正常に実行されない理由が、フォーマット・エラー以外の理由によるためです。プログラムの場合、たとえば次の文では、'joplin'が地区名でないにもかかわらず、コンパイルできます。

LIMIT district TO 'joplin'

文は正常にコンパイルされますが、実行時にはエラー・メッセージが表示されます。

コンパイルされない文

プログラム内の一部の文はまったくコンパイルされず、実行のたびに解釈されます。これには、アンパサンド置換を含む文、アナリティック・ワークスペース操作に関する文およびプログラムをコマンドとしてコールする文が含まれます。(プログラムをファンクションとしてコールする文またはCALLコマンドでコールする文はコンパイルされます。)

PRGTRACEオプション

PRGTRACEオプションを使用して、プログラム内のどの文がコンパイル済かを確認できます。PRGTRACEをYESに設定してプログラムを実行すると、実行前に各文が現行の出力ファイルに記録されます。コンパイル済の文は等号によって識別されます。

(PRG= program-name) statement

未コンパイルの文はコロンによって識別されます。

(PRG: program-name) statement

複数のアナリティック・ワークスペース

別のアナリティック・ワークスペース内のオブジェクトを使用するコンパイル可能なオブジェクトをコンパイルする際は、現行のOracle OLAPセッションに2番目のアナリティック・ワークスペースをアタッチする必要があります。その後、そのアナリティック・ワークスペースまたは同じ名前および型のオブジェクトを持つアタッチされたもう1つのアナリティック・ワークスペースで、コンパイル可能なオブジェクトを実行します。Oracle OLAPにより、オブジェクトが、コンパイル可能なオブジェクトのコンパイルに使用するオブジェクトと同じ名前、型(変数、ディメンションなど)、データ型(INTEGERTEXTなど)およびディメンションを持っているかどうかがチェックされます。

アクティブなアナリティック・ワークスペースが複数ある場合、両方のアナリティック・ワークスペースに同じ名前のオブジェクトを存在させることはできません。たとえば、プログラムのアナリティック・ワークスペースが1つあり、製品TEAおよびCOFFEEに関するデータを保持する2つのアナリティック・ワークスペースがある場合、製品のアナリティック・ワークスペースがどちらもMONTHディメンションを持ち、プログラムがそのMONTHを参照することは可能です。ただし、セッション中は、MONTHディメンションが1つのみになるように、製品のアナリティック・ワークスペースは1回に1つのみをアタッチするようにします。

メモリーの使用

コードをコンパイルするには、プログラムで参照されるすべての変数(アンパサンド置換を含む行内の変数を除く)をメモリーにロードする必要があります。したがって、Oracle OLAPは、ユーザーが使用するすべての変数の定義を読み取って、オブジェクト定義の保存用に確保されているメモリーの空き領域にそれを保存します。コンパイル中に大きな変数がバインドされると、多量のメモリーが使用され、容量の大きいEXPTEMPファイルが作成されることがあります。大きな変数が多数バインドされると、場合によってはバインドに失敗して、Oracle OLAPによって「メイン・メモリーが不足しています」などのようなエラー・メッセージが記録されます。オブジェクト定義のメモリーへのロードの詳細は、LOADコマンドを参照してください。

例9-69 プログラムのコンパイル

次のコマンドは、myprogプログラムをコンパイルするCOMPILEコマンドの例です。

COMPILE myprog

myprogプログラム内のLIMITコマンドでディメンションmonthのスペルを間違えたとします。

LIMIT motnh TO LAST 6

COMPILEコマンドがこの文を検出すると、次のメッセージが生成されます。

ERROR: (MXMSERR00) Analytic workspace object MOTNH does not exist.
In DEMO!MYPROG PROGRAM:
limit month to last 6

プログラムを編集してエラーを修正してから、コンパイルを再試行できます。

例9-70 プログラム・エラーの検出

この例では、2つのエラーを含むsalesrptというプログラムを使用します。

DEFINE salesrpt PROGRAM
PROGRAM
ROW WIDTH 80 CENTER Monthly Report
BLANK 2
ROWW 'Total Sales' TOTAL(sales)
END

次の文を使用して、プログラムをコンパイルできます。

COMPILE salesrpt

Oracle OLAPによってエラーが両方とも識別され、次のメッセージが記録されます。

ERROR: You provided extra input starting at 'REPORT'.
In SALESRPT PROGRAM:
ROW WIDTH 80 CENTER Monthly Report
ERROR: ROWW is not a command.
In SALESRPT PROGRAM:
roww 'Total Sales' TOTAL(sales)

この時点でプログラムを編集し、Monthly Reportを一重引用符で囲み、ROWWのスペルを直して、エラーを修正します。その後、プログラムを再度コンパイルして、コンパイルしたコードを使用しているアナリティック・ワークスペースの一部として保存できます。