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

前
 
次
 

PROGRAM

PROGRAMコマンドは、新規または既存のプログラムにまったく新しい内容を入力するコマンドです。プログラムに複数行のコードがすでに存在する場合、これらは上書きされます。

PROGRAMを使用して、プログラム・オブジェクトの内容を入力するには、プログラム・オブジェクトの定義は最新のもの、または現行のセッション中に検討されたものにする必要があります。そうでない場合は、最初にCONSIDER文を使用し、現行の定義にする必要があります。

PROGRAM文の代替文はEDIT PROGRAM文であり、OLAP Worksheet内でのみ使用できます。EDIT PROGRAM文を実行すると、programオブジェクトの仕様を追加、削除または変更できる編集ウィンドウが開きます。


関連項目:

OLAP DMLプログラムの記述、コンパイルおよびデバッグの詳細は、第6章「OLAP DMLプログラム」を参照してください。

構文

PROGRAM [contents]

パラメータ

contents

プログラムの行を構成するOLAP DML文を表すテキスト式。プログラム内には、ほとんどのOLAP DML文を使用できます。OLAP DMLプログラムの記述、コンパイルおよびデバッグの詳細は、第6章「OLAP DMLプログラム」を参照してください。

プログラム内に記述できる最大の行数は32,000です。コマンドライン・レベルでPROGRAM文をコード化する際は、改行デリミタ(\n)でプログラムの行を分けるか、「即時実行のプログラム」に示すJOINLINESファンクションを使用します。

例10-79 引数を持つユーザー定義ファンクション

アナリティック・ワークスペースにunits.planという名前の変数が含まれ、この変数はproductdistrictおよびmonthディメンションによってディメンション化されているとします。この変数は販売予定の製品数を示すINTEGERデータを保持します。

また、units_goals_metという名前のプログラムを定義するとします。このプログラムはユーザー定義ファンクションです。これは、units.plan変数の特定のセルを指定する3つのディメンション値の引数を受け取り、さらに、実際に販売された数量をそのセルに指定する4番目の引数を受け取ります。このプログラムは、コール側プログラムにブール値を返します。実際の販売数量が予定販売数量の10%以内である場合はYESを返し、そうでない場合はNOを返します。

units_goals_metプログラムの定義は、次のとおりです。

DEFINE units_goal_met PROGRAM BOOLEAN
LD Tests whether actual units met the planned estimate
"Program Initialization
ARGUMENT userprod  TEXT
ARGUMENT userdist  TEXT
ARGUMENT usermonth TEXT
ARGUMENT userunits INTEGER
VARIABLE answer boolean
TRAP ON errorlabel
PUSH product district month
"Program Body
LIMIT product TO userprod
LIMIT district TO userdist
LIMIT month TO usermonth
IF (units.plan - userunits) / units.plan GT .10
   THEN answer = NO
   ELSE answer = YES
"Normal Exit
POP product district month
RETURN answer
"Abnormal Exit
errorlabel:
POP product district month
SIGNAL ERRORNAME ERRORTEXT
END

units_goal_metプログラムを実行し、successという名前の変数に戻り値を格納するには、代入文(SET)を使用します。

success = units_goal_met('TENTS' 'BOSTON' 'JUN96' 2000)

例10-80 即時実行のプログラム

この例は、柔軟な即時実行のレポート・プログラムを作成して、アンパサンド置換を使用した従来型のプログラムの非能率性を回避します。従来型のプログラムには、次のようなループが存在します。

FOR &dimname
   ROW &dimname &varname

アンパサンド置換を回避するには、たとえば、STANDARDREPというプログラムを定義し、内部にコードを記述しないままにするか、破棄しても差し支えないコードを記述しておきます。次に、レポート・プログラムに次のような行を挿入します。

DEFINE myreport PROGRAM
LD Program to produce my report
PROGRAM
ARGUMENT dimname TEXT
ARGUMENT varname TEXT
...
CONSIDER standardrep
PROGRAM JOINLINES(JOINCHARS('FOR ', dimname) - 
   JOINCHARS('   ROW ', dimname, ' ', varname) )
COMPILE standardrep
standardrep
...

例10-81 入力ファイルを基にしたプログラム

この例は、salesrep.infという名前のASCIIディスク・ファイルに記述された簡単なプログラムの本文です。ファイルの最初の行にはプログラムが定義され、2番目の行にはPROGRAM文が含まれ、後続の行にはプログラムの行が記述されています。

DEFINE salesrep PROGRAM
PROGRAM
PUSH month product district
TRAP ON haderror
LIMIT month TO FIRST 3
LIMIT product TO FIRST 3
LIMIT district TO ALL
REPORT grandtotals sales
haderror:
POP month product district
END

salesrepプログラムをアナリティック・ワークスペースに含めるには、次の文を実行します。

INFILE 'salesrep.inf'

既存のプログラムを基にして入力ファイルを作成するには、OUTFILE文を使用します。

例10-82 PROGRAM文のかわりにOLAP Worksheetを使用する場合

OLAP Worksheetを使用してプログラムを作成する場合、EDIT文を使用して、内容を入力できる「編集」ウィンドウを表示できます。たとえば、salesrepという名前の新規プログラムを定義して、これを「編集」ウィンドウに表示するには、次の文を使用します。

DEFINE salesrep PROGRAM
EDIT salesrep