OLAP_CONDITION
は、アナリティック・ワークスペースの問合せ中にOLAP DMLコマンドを動的に実行するSQLファンクションです。
OLAP_CONDITION
ファンクションは、OLAP_TABLE
のコールで使用される制限マップの3つの入力ポイントのうちの1つでOLAP DMLコマンドを実行します(「OLAP_TABLE制限マップ内のOLAP_CONDITIONの入力ポイント」を参照)。
注意: OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。 |
構文
OLAP_CONDITION( r2c IN RAW(32), expression IN VARCHAR2, event IN NUMBER DEFAULT 1); RETURN NUMBER;
パラメータ
制限マップのROW2CELL
句で指定された列の名前。このパラメータは、OLAP_TABLE
の特定の呼出しを識別するためにOLAP_CONDITION
によって使用されます。
ROW2CELL
列は、単一行ファンクションの処理で使用されます。(「OLAP_EXPRESSION」を参照) OLAP_CONDITION
では、単に識別子として使用されます。
ROW2CELL
列の作成方法については、「ROW2CELL句」を参照してください。
r2cパラメータによって特定される、OLAP_TABLE
ファンクションのコンテキスト内で実行される単独のOLAP DMLコマンド。
OLAP_TABLE
の処理中に、expressionパラメータで指定されたOLAP DMLコマンドの実行をトリガーするイベント。このパラメータに指定できる値は、0、1または2です(表A-2を参照)。
使用上の注意
OLAP_TABLE制限マップ内のOLAP_CONDITIONの入力ポイント
OLAP_CONDITION
のパラメータでは、OLAP_TABLE
の呼出し、制限マップの入力ポイント、その入力ポイントで実行されるOLAP DMLコマンドが特定されます。
対象の制限マップにはROW2CELL
列を含める必要があります。OLAP_CONDITION
は、この列を使用してOLAP_TABLE
のインスタンスを識別します。そのインスタンス内で、OLAP_CONDITION
は3つの入力ポイントのいずれかでOLAP DMLコマンドを実行します。ユーザーが指定した入力ポイントによって、問合せで返されたデータに条件が影響するかどうか、および問合せの完了時にも条件が有効なままかどうかが決まります。
OLAP_CONDITION
は、次のいずれかの時点でトリガーされます。
制限マップ内のディメンションのステータスが保存される前(結果セットが計算される前)
結果セットが計算された後、フェッチされる前(デフォルト)
結果セットがフェッチされ、制限マップ内のディメンションのステータスがリストアされた後
OLAP_CONDITION
の入力ポイントを表A-2で説明します。各入力ポイントの発生時点を確認するには、「OLAP_TABLEにおける処理順序」を参照してください。
表A-2 OLAP_TABLE制限マップ内のOLAP_CONDITIONの入力ポイント
入力ポイント | 説明 |
---|---|
0 |
制限マップの この入力ポイントは、「OLAP_TABLEにおける処理順序」の1と2の間。
|
1 |
この入力ポイントは、「OLAP_TABLEにおける処理順序」の4と5の間。
|
2 |
データがフェッチされ、制限マップ内のディメンションのステータスがリストアされた後に、OLAP DMLコマンドを実行する。 この入力ポイントは、「OLAP_TABLEにおける処理順序」の8の後。
|
例
OLAP_CONDITION
を使用する問合せの例を、例A-11「OLAP_CONDITIONを使用したUNIT_COST_PRICE_VIEWの問合せ」に示します。これらの例では、MYAW
というアナリティック・ワークスペースのPRICE_CUBE
を使用しています。このキューブには、時間ディメンションと製品ディメンションがあり、単位原価と単位価格のメジャーが格納されています。
これらの例は、unit_cost_price_view
というビューを基にしています。このビューを作成するためのSQLを、例A-10「PRICE_CUBEのビュー」に示します。アナリティック・ワークスペースのビューの作成方法については、「OLAP_TABLEを使用したリレーショナル・ビューの作成」を参照してください。
例A-10 PRICE_CUBEのビュー
-- Create the logical row SQL>CREATE TYPE unit_cost_price_row AS OBJECT ( aw_unit_cost NUMBER, aw_unit_price NUMBER, aw_product VARCHAR2(50), aw_product_gid NUMBER(10), aw_time VARCHAR2(20), aw_time_gid NUMBER(10), r2c RAW(32)); -- Create the logical table SQL>CREATE TYPE unit_cost_price_table AS TABLE OF unit_cost_price_row; -- Create the view SQL>CREATE OR REPLACE VIEW unit_cost_price_view AS SELECT aw_unit_cost, aw_unit_price, aw_product, aw_product_gid, aw_time, aw_time_gid, r2c FROM TABLE(OLAP_TABLE( 'myaw DURATION SESSION', 'unit_cost_price_table', '', 'MEASURE aw_unit_cost FROM price_cube_unit_cost MEASURE aw_unit_price FROM price_cube_unit_price DIMENSION product WITH HIERARCHY product_parentrel INHIERARCHY product_inhier GID aw_product_gid FROM product_gid ATTRIBUTE aw_product FROM product_short_description DIMENSION time WITH HIERARCHY time_parentrel INHIERARCHY time_inhier GID aw_time_gid FROM time_gid ATTRIBUTE aw_time FROM time_short_description ROW2CELL r2c')); -- query the view SQL>SELECT * FROM unit_cost_price_view WHERE aw_product = 'Hardware' AND aw_time in ('2000', '2001', '2002', '2003') ORDER BY aw_time; AW_UNIT_COST AW_UNIT_PRICE AW_PRODUCT AW_PRODUCT_GID AW_TIME AW_TIME_GID R2C ------------ ------------- ---------- -------------- ------- ----------- ----- 211680.12 224713.71 Hardware 3 2000 3 00... 195591.60 207513.16 Hardware 3 2001 3 00... 184413.05 194773.78 Hardware 3 2002 3 00... 73457.31 77275.06 Hardware 3 2003 3 00...
例A-11 OLAP_CONDITIONを使用したUNIT_COST_PRICE_VIEWの問合せ
この例の問合せでは、OLAP_CONDITION
を使用して、例A-10「PRICE_CUBEのビュー」のUNIT_COST_PRICE_VIEW
の問合せを変更します。それぞれの問合せのOLAP_CONDITION
では、異なる入力ポイントを使用してTIME
ディメンションを2000年に制限しています。
最初の問合せでは、OLAP_CONDIITON
で入力ポイント0を使用しています。制限されたデータがOLAP_TABLE
によって返され、この制限はアナリティック・ワークスペースでも有効なままです。
SQL>SELECT * FROM unit_cost_price_view WHERE aw_product = 'Hardware' AND aw_time in ('2000', '2001', '2002', '2003') AND OLAP_CONDITION(r2c, 'limit time to time_short_description eq ''2000''', 0)=1 ORDER BY aw_time; AW_UNIT_COST AW_UNIT_PRICE AW_PRODUCT AW_PRODUCT_GID AW_TIME AW_TIME_GID R2C ------------ ------------- ---------- -------------- ------- ----------- ----- 211680.12 224713.71 Hardware 3 2000 3 00... --Check status in the analytic workspace SQL>exec dbms_aw.execute('rpr time_short_description'); TIME TIME_SHORT_DESCRIPTION ---- ---------------------- 3 2000 -- Reset status SQL>exec dbms_aw.execute('allstat');
次の問合せでは、OLAP_CONDIITON
で入力ポイント1を使用しています。制限されたデータがOLAP_TABLE
によって返されますが、この制限はアナリティック・ワークスペースでは有効ではありません。
この場合、入力ポイント1がデフォルトであるため、3番目のパラメータは指定しなくてもかまいません。
SQL>SELECT * FROM unit_cost_price_view WHERE aw_product = 'Hardware' AND aw_time in ('2000', '2001', '2002', '2003') AND OLAP_CONDITION(r2c, 'limit time to time_short_description eq ''2000''', 1)=1 ORDER BY aw_time; AW_UNIT_COST AW_UNIT_PRICE AW_PRODUCT AW_PRODUCT_GID AW_TIME AW_TIME_GID R2C ------------ ------------- ---------- -------------- ------- ----------- ----- 211680.12 224713.71 Hardware 3 2000 3 00... --Check status in the analytic workspace SQL>exec dbms_aw.execute('rpr time_short_description'); TIME TIME_SHORT_DESCRIPTION ---- ---------------------- 19 Jan-98 20 Feb-98 21 Mar-98 22 Apr-98 . . . 1 1998 2 1999 3 2000 4 2001 85 2002 102 2003 119 2004 -- Reset status SQL>exec dbms_aw.execute('allstat');
最後の問合せでは、OLAP_CONDIITON
で入力ポイント2を使用しています。この制限はOLAP_TABLE
によって返されたデータには影響しませんが、アナリティック・ワークスペースでは有効なままです。
SQL>SELECT * FROM unit_cost_price_view WHERE aw_product = 'Hardware' AND aw_time in ('2000', '2001', '2002', '2003') AND OLAP_CONDITION(r2c, 'limit time to time_short_description eq ''2000''', 2)=1 ORDER BY aw_time; AW_UNIT_COST AW_UNIT_PRICE AW_PRODUCT AW_PRODUCT_GID AW_TIME AW_TIME_GID R2C ------------ ------------- ---------- -------------- ------- ----------- ----- 211680.12 224713.71 Hardware 3 2000 3 00... 195591.60 207513.16 Hardware 3 2001 3 00... 184413.05 194773.78 Hardware 3 2002 3 00... 73457.31 77275.06 Hardware 3 2003 3 00... --Check status in the analytic workspace SQL>exec dbms_aw.execute('rpr time_short_description'); TIME TIME_SHORT_DESCRIPTION ---- ---------------------- 3 2000