ヘッダーをスキップ
Oracle OLAP DMLリファレンス
11g リリース1(11.1)
E05732-02
  目次へ
目次
索引へ
索引

戻る
戻る
 
次へ
次へ
 

COMPILE

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

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

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

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

構文

COMPILE object-name

引数

object-name

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

注意

コンパイル・オプション

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

削除されたオブジェクト

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

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

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

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

宣言エラー

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

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

コンパイルの優位点

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

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-68 プログラムのコンパイル

次のコマンドは、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-69 プログラム・エラーの検出

この例では、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のスペルを直して、エラーを修正します。その後、プログラムを再度コンパイルして、コンパイルしたコードを使用しているアナリティック・ワークスペースの一部として保存できます。