OLAP DMLプログラムの内部でARGFRファンクションを使用すると、プログラムに渡される引数を参照できます。このファンクションは、1つ以上の引数のグループを、指定した引数の番号を先頭に単一のテキスト値として返します。ARGFRは、コマンドとして起動したプログラムの内部でのみ使用でき、プログラムをユーザー定義ファンクションとして起動したりCALL文で起動した場合は使用できません。
注意: 通常は、プログラムに渡される引数の参照にARGFRファンクションを使用しなくても済むよう、ARGUMENT文を使用して、プログラム内で引数を定義します。プログラムに渡される引数をARGUMENTを使用して定義する方法の詳細は、「プログラムに渡される引数の宣言」を参照してください。 |
パラメータ
参照する引数のグループにある最初の引数の位置に応じた数値。ARGFR(1)
を指定すると最初の引数とその後のすべての引数が返され、ARGFR(2)
を指定すると2番目の引数とその後のすべての引数が返されます(以降同様)。存在する引数の数がn個未満の場合、ARGFRはNULL値を返します。また、ARGFRはnの値が0
(ゼロ)または負の値の場合にもNULL値を返します。
例
例7-22 ARGおよびARGFRによる引数の受渡し
売上レポートを生成するプログラムがあるとします。任意の製品および任意の期間(月単位)を対象にしてレポートを生成できるようにするため、プログラム内ではproduct
とmonth
の2つのディメンションを特定の値に制限しないことにします。そのかわりに、product
引数にはARG、month
引数にはARGFRファンクションを使用したLIMITコマンドを使用します。これによって、プログラムを実行したときにこれらの項目を指定できます。
ARGFRの前にアンパサンド(&
)を付けてLIMITコマンド内に記述すると、Oracle OLAPでは、&ARGFR
の値が置換されてからコマンドが実行されるため、引数全体がLIMITコマンドの句として処理されます。salesrprt
プログラムには、&ARGFR
を指定したLIMITコマンドが記述されています。
DEFINE salesrpt PROGRAM PROGRAM PUSH product month district TRAP ON cleanup LIMIT product TO UPCASE(ARG(1)) LIMIT month TO &ARGFR(2) LIMIT district TO ALL REPORT grandtotals DOWN district sales cleanup: POP product month district END
salesrpt
プログラムのコマンドラインには、2つ以上の引数を指定する必要があります。最初の引数はレポートの対象製品を表し、2番目以降の引数は月を表します。LIMIT month
文では、コマンドラインに引数として指定した月が&ARGFR(2)
ファンクションによって返されます。
次の文によって、month
の値としてJan96
、Feb96
、Mar96
およびApr96
を指定したsalesrpt
プログラムが実行されます。
salesrpt 'Canoes' 'Jan96' TO 'Apr96'
この文によって生成される出力は、次のとおりです。
PRODUCT: CANOES -------------------SALES------------------ -------------------MONTH------------------ DISTRICT Jan96 Feb96 Mar96 Apr96 ------- ---------- ---------- ---------- --------- Boston 70,489.44 82,237.68 97,622.28 134,265.60 Atlanta 56,271.40 61,828.33 77,217.62 109,253.38 Chicago 48,661.74 54,424.94 68,815.71 93,045.46 Dallas 35,244.72 40,218.43 46,810.68 64,031.28 Denver 44,456.41 50,623.19 57,013.01 78,038.13 Seattle 67,085.12 74,834.29 87,820.04 119,858.56 ---------- ---------- ---------- ---------- 322,208.83 364,166.86 435,299.34 598,492.41 ========== ========== ========== ==========
次の文では、1996年の最初の3か月が指定されています。
salesrpt 'Tents' quarter 'Q1.96'
PRODUCT: TENTS -------------SALES------------- -------------MONTH------------- DISTRICT Jan96 Feb96 Mar96 -------------- ---------- ---------- --------- Boston 50,808.96 34,641.59 45,742.21 Atlanta 46,174.92 50,553.52 58,787.82 Chicago 31,279.78 31,492.35 42,439.52 Dallas 50,974.46 53,702.75 71,998.57 Denver 35,582.82 32,984.10 44,421.14 Seattle 45,678.41 43,094.80 54,164.06 ---------- ---------- --------- 260,499.35 246,469.11 317,553.32 ========== ========== ==========