OLAP DMLプログラムの内部でARGファンクションを使用すると、プログラムに渡される引数を参照できます。このファンクションは、1つの引数をテキスト値として返します。
注意: 通常は、プログラムに渡される引数の参照にARGファンクションを使用しなくても済むよう、ARGUMENT文を使用して、プログラム内で引数を定義します。プログラムに渡される引数をARGUMENTを使用して定義する方法の詳細は、「プログラムに渡される引数の宣言」を参照してください。 |
パラメータ
参照する引数の位置に応じた数値。ARG(1)
を指定するとプログラムの最初の引数が返され、ARG(2)
を指定するとプログラムの2番目の引数が返されます(以降同様)。プログラムによってコールされる引数の数がn個未満の場合、ARGはNULL値を返します。また、ARGはnの値がゼロまたは負の値の場合にもNULL値を返します。
例
例7-20 引数の代入
売上レポートを生成するプログラムがあるとします。任意の2つの期間(月単位)を対象にしてレポートを生成できるようにするため、プログラム内ではmonth
ディメンションを特定の月に制限しないことにします。そのかわりに、ARGファンクションをLIMITコマンド内で使用し、2か月間の開始月と終了月は、プログラムの実行時に引数で指定するようにします。
ARGファンクションの前にはUPCASEファンクションが記述されています。UPCASEファンクションを使用すると、アナリティック・ワークスペース内のディメンション値が大文字で指定されている場合、引数を大文字または小文字で指定できます。&
(アンパサンド)を接頭辞として使用した場合、Oracle OLAPは、LIMITコマンドの実行前にARGの値(この場合はmonth
ディメンションの値)を置換すると判断するため、同様の効果があります。ただし、&
(アンパサンド)が付いているプログラム行はコンパイルできないので、プログラムの実行結果の表示速度が遅くなるというデメリットがあります。
DEFINE salesrpt PROGRAM PROGRAM PUSH month product district TRAP ON cleanup LIMIT month TO UPCASE(ARG(1)) TO UPCASE(ARG(2)) LIMIT product TO 'CANOES' LIMIT district TO all REPORT grandtotals DOWN district sales LIMIT month TO UPCASE(ARG(3)) TO UPCASE(ARG(4)) REPORT grandtotals DOWN district sales cleanup: POP month product district END
このプログラムを実行するには、プログラム名(salesrpt
)を指定し、その後に2組の月(レポートの対象となる売上期間の開始月と終了月)を指定します。その後、LIMIT MONTH
文を実行すると、コマンドラインに指定した月は、LIMITコマンドのARG(1)
、ARG(2)
、ARG(3)
およびARG(4)
の戻り値として渡されます。
salesrpt 'Jan95' 'Mar95' 'Jan96' 'Mar96'
PRODUCT: Canoes ------------SALES-------------- ------------MONTH-------------- DISTRICT Jan95 Feb95 Mar95 --------------------------------------------- Boston 66,013.92 76,083.84 91,748.16 Atlanta 49,462.88 54,209.74 67,764.20 Chicago 45,277.56 50,595.75 63,576.53 Dallas 33,292.32 37,471.29 43,970.59 Denver 45,467.80 51,737.01 58,437.11 Seattle 64,111.50 71,899.23 83,943.86 ---------- --------- --------- 303,625.98 341,996.86 409,440.44 ========== ========== ========== PRODUCT: Canoes ------------SALES--------------- ------------MONTH--------------- DISTRICT Jan96 Feb96 Mar96 --------------------------------------------- Boston 70,489.44 82,237.68 97,622.28 Atlanta 56,271.40 61,828.33 77,217.62 Chicago 48,661.74 54,424.94 68,815.71 Dallas 35,244.72 40,218.43 46,810.68 Denver 44,456.41 50,623.19 57,013.01 Seattle 67,085.12 74,834.29 87,820.04 ---------- --------- --------- 322,208.83 364,166.86 435,299.35 ========== ========== ==========