OLAP_CONDITIONは、アナリティック・ワークスペースの問合せ中にOLAP DMLコマンドを動的に実行するSQLファンクションです。
OLAP_CONDITIONファンクションは、OLAP_TABLEのコールで使用される制限マップの3つの入力ポイントのうちの1つでOLAP DMLコマンドを実行します(「OLAP_TABLE制限マップ内のOLAP_CONDITIONの入力ポイント」を参照)。
|
注意: OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。 |
返される内容
OLAP_CONDITIONの呼出しが成功した場合、数値1が返されます。
構文
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_CONDITIONで入力ポイント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_CONDITIONで入力ポイント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_CONDITIONで入力ポイント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