OLAP DMLプログラムのRETURNコマンドは、最後の行より前でプログラムの実行を終了します。オプションとして、プログラムがファンクションとしてコールされた場合に返す値を指定できます。この値は、プログラムを定義したときに指定したのと同じデータ型またはディメンションである必要があります。
使用上の注意
戻り値のディメンション性
プログラムによる戻り値は、ディメンションを持たない単一の値です。ただし、ユーザー定義ファンクションをコールする文のコンテキスト内では、ファンクションの式はその引数のディメンションを持ちます。この場合、ファンクションの式に含まれるディメンション値の組合せごとにプログラムがコールされます。
戻り値のデータ型
プログラムを定義するときにデータ型を指定すると、戻り値はそのデータ型になります。プログラムを定義するときにディメンションを指定すると、戻り値はそのディメンションの単一の値になります。RETURN文の式が、宣言されているデータ型またはディメンションと一致しない場合、Oracle OLAPは宣言されているデータ型に式を変換します。
プログラムの定義でデータ型またはディメンションを指定しない場合、戻り値はワークシート・データとして処理され、すべての戻り値がOracle OLAPによってコール側のコンテキストで必要とされるデータ型に変換されるため、予期しない結果になる場合があります。
ディメンションの位置
プログラムがディメンションの値を返す場合、そのディメンションはプログラムと同じアナリティック・ワークスペースで宣言されている必要があります。そのプログラムは、LISTBYプログラムの出力に含まれ、ディメンションに対するOBJ(ISBY)は、TRUEになります。
戻り値なし
ファンクションとして起動したプログラムが戻り値を返さない場合、コール側プログラムへの戻り値はNAになります。
例
例10-106 プログラムの早期終了
この例では、newfiguresという名前の変数が現行のアナリティック・ワークスペースに存在する場合にのみレポートを生成するレポート・プログラムを必要とするとします。このプログラムでは、IF文を使用してnewfiguresの存在を確認し、存在しない場合はRETURNで実行を停止します。
DEFINE sales.report PROGRAM
PROGRAM
IF NOT EXISTS('newfigures')
THEN DO
SHOW 'The new data is not yet available.'
RETURN
DOEND
PUSH month
TRAP ON cleanup
LIMIT month TO LAST 3
REPORT ACROSS month: newfigures
cleanup:
POP month
END
newfiguresがアナリティック・ワークスペースに存在しない場合にこのプログラムを実行すると、プログラムはメッセージを生成し、RETURN文でプログラムの実行をその時点で終了します。
例10-107 戻り値
次のプログラムは、actual変数から来年の予算額を取得します。これは一時的な計算です。このプログラムをREPORT文でコールすると、予算額が計算およびレポートされますが、アナリティック・ワークスペースには保存されません。
DEFINE budget.growth PROGRAM DECIMAL PROGRAM VARIABLE growth DECIMAL VARIABLE factor DECIMAL growth = TOTAL(actual(year 'Yr97') year) - TOTAL(actual(year - 'Yr96') year) factor = ( 1 + growth ) / TOTAL(actual(year 'Yr96') year) RETURN TOTAL(actual(year 'Yr97') year) * (factor * factor/2) END