ヘッダーをスキップ
Oracle® OLAP DMLリファレンス
11gリリース2 (11.2)
B61346-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

OLAP_CONDITION

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;

パラメータ

r2c

制限マップのROW2CELL句で指定された列の名前。このパラメータは、OLAP_TABLEの特定の呼出しを識別するためにOLAP_CONDITIONによって使用されます。

ROW2CELL列は、単一行ファンクションの処理で使用されます。(「OLAP_EXPRESSION」を参照) OLAP_CONDITIONでは、単に識別子として使用されます。

ROW2CELL列の作成方法については、ROW2CELL句を参照してください。

expression

r2cパラメータによって特定される、OLAP_TABLEファンクションのコンテキスト内で実行される単独のOLAP DMLコマンド。

event

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

制限マップのPREDMLCMD句が処理された後、制限マップ内のディメンションのステータスが保存される前に、OLAP DMLコマンドを実行する。

この入力ポイントは、「OLAP_TABLEにおける処理順序」12の間。

OLAP_CONDITIONが制限マップのいずれかのディメンションを制限する場合、その制限はOLAP_TABLEの実行後もワークスペースに維持される(ただし、制限マップのPOSTDMLCMD句に指定したコマンドによってステータスが変更されない場合)。

1

WHERE句の条件が満たされた後、データがフェッチされる前に、OLAP DMLコマンドを実行する。(デフォルト)

この入力ポイントは、「OLAP_TABLEにおける処理順序」45の間。

FETCH以外のOLAP DMLコマンドをOLAP_TABLEolap_commandパラメータに指定した場合は、OLAP_CONDITIONの後、データがフェッチされる前に実行される。(olap_commandパラメータ、またはOLAP_CONDITION自体にFETCHコマンドを使用することは、一般的には推奨されない。「olap_commandパラメータでのFETCHの使用」を参照。)

OLAP_CONDITIONが制限マップのいずれかのディメンションを制限する場合、その制限は問合せの実行中のみ有効。

2

データがフェッチされ、制限マップ内のディメンションのステータスがリストアされた後に、OLAP DMLコマンドを実行する。

この入力ポイントは、「OLAP_TABLEにおける処理順序」8の後。

OLAP_CONDITIONがいずれかのディメンションを制限する場合、その制限は問合せが完了した後もアナリティック・ワークスペースに維持される。


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