ヘッダーをスキップ
Oracle OLAP DMLリファレンス
11g リリース1(11.1)
E05732-02
  目次へ
目次
索引へ
索引

戻る
戻る
 
次へ
次へ
 

OLAP_TABLEを使用したリレーショナル・ビューの作成

OLAP_TABLEは、リレーショナル表およびビューに結合可能なオブジェクトの表、またはOLAP_TABLEによって移入された別のオブジェクトの表に結合可能なオブジェクトの表を返すSQLファンクションです。SQL文の中で、表またはビューの名前を指定したい任意の部分にOLAP_TABLEファンクション・コールを指定できます。

OLAP_TABLEは、制限マップを使用して、アナリティック・ワークスペース内で定義されているディメンションやメジャーを、論理表の列にマップします。制限マップとSQL SELECT文のWHERE句が組み合されて、アナリティック・ワークスペース内で実行される一連のOLAP DML LIMITコマンドが生成されます。

OLAP_TABLEでは、制限マップと事前定義された論理表を一緒に使用したり、制限マップの情報を使用して実行時に論理表を動的に生成したりできます。

必須のOLAP DMLオブジェクト

制限マップでのディメンション階層のマッピングをサポートするためには、アナリティック・ワークスペース内で次のオブジェクトが事前定義されている必要があります。

  • 親リレーション。階層内の各ディメンション・メンバーの親を表します。詳細は、「parentrelリレーション」を参照してください。

  • 階層ディメンション。ディメンションの階層を表します。詳細は、「hierlistディメンション」を参照してください。

  • 階層内変数または値セット。階層の各レベルに属するディメンション・メンバーを表します。詳細は、「inhier値セットまたは変数」を参照してください。

  • グルーピングID変数。各ディメンション・メンバーの階層内の深さを表します。詳細は、「gidrelリレーション」を参照してください。

  • ファミリ・リレーション。階層内の各ディメンション・メンバーの完全な親子関係を表します。詳細は、「familyrelリレーション」を参照してください。

  • レベル・ディメンション。ディメンションのレベルを表します。詳細は、「levellistディメンション」を参照してください。

OLAP_TABLEで使用する論理表の作成

OLAP_TABLEによって移入される論理表は、実際には表型です。また、その行は、抽象データ型またはADTとも呼ばれるユーザー定義のオブジェクト型です。

ユーザー定義のオブジェクト型は、表の各列に相当する属性で構成されます。行を定義するための基本的な構文は次のとおりです。

CREATE TYPE object_name AS OBJECT (
   attribute1      datatype,
   attribute2      datatype,
   attributen      datatype);

表型はオブジェクト型の集合です。これらのオブジェクト型は表の各行に相当します。表型を作成するための基本的な構文は次のとおりです。

CREATE TYPE table_name AS TABLE OF object_name;

OLAP_TABLEでは、制限マップと事前定義された論理表を一緒に使用したり、制限マップの情報を使用して実行時に論理表を動的に生成したりできます。


参照:


事前定義されたADTを使用したOLAP_TABLEの使用

オブジェクトを格納する表は、事前に定義することも、動的に生成することもできます。表型を事前にデータベース内に作成しておけば、その表はOLAP_TABLEをコールしたときにいつでも使用できます。一般に、動的にオブジェクトを生成する問合せよりも、事前定義されたオブジェクトを使用する問合せの方がパフォーマンスに優れています。

例A-1「事前定義されたADTを使用してビューを作成するためのテンプレート」は、事前定義されたADTを使用してアナリティック・ワークスペースのビューを作成する方法を示しています。

例A-1 事前定義されたADTを使用してビューを作成するためのテンプレート

SET ECHO ON
SET SERVEROUT ON

DROP TYPE table_obj;
DROP TYPE row_obj;

CREATE TYPE row_obj AS OBJECT (
            column_first     datatype,
            column_next      datatype,
            column_n         datatype);
/
CREATE TYPE table_obj AS TABLE OF row_obj;
/
CREATE OR REPLACE VIEW view_name AS
   SELECT column_first, column_next, column_n
      FROM TABLE(OLAP_TABLE(
         'analytic_workspace',
         'table_obj',
         'olap_command',
         'limit_map'));
/
COMMIT;
/
GRANT SELECT ON view_name TO PUBLIC;

例A-2「事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー」では、OLAP_TABLEと事前定義された表型を使用して、MYAW_AWスキーマ内のMYAWというアナリティック・ワークスぺースのTIMEディメンションのリレーショナル・ビューを作成します。

OLAP_TABLEコールの1番目のパラメータはアナリティック・ワークスペースの名前です。2番目は事前定義された表型の名前です。4番目は、ワークスペース・ディメンションと事前定義された表型の列とのマッピングを指定する制限マップです。3番目のパラメータは指定されていません。

例A-2 事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー

CREATE TYPE time_cal_row AS OBJECT (
            time_id           varchar2(32),
            cal_short_label   varchar2(32),
            cal_end_date      date,
            cal_timespan      number(6));

CREATE TYPE time_cal_table AS TABLE OF time_cal_row;

CREATE OR REPLACE VIEW time_cal_view AS
   SELECT time_id, cal_short_label, cal_end_date, cal_timespan
      FROM TABLE(OLAP_TABLE(
         'myaw_aw.myaw duration session',
         'time_cal_table',
          '',
         'DIMENSION time_id from time with
            HIERARCHY time_parentrel
               INHIERARCHY time_inhier
            ATTRIBUTE cal_short_label from time_short_description
            ATTRIBUTE cal_end_date    from time_end_date
            ATTRIBUTE cal_timespan    from time_time_span'));

自動ADTを使用したOLAP_TABLEの使用

表型の名前が引数として指定されていない場合、OLAP_TABLEは、制限マップの情報を使用して自動的に論理表を生成します。この場合、その表型は、SQL SELECT文をコールするコンテキスト内で、実行時にしか使用できません。

例A-3「自動ADTを使用してビューを作成するためのテンプレート」は、自動ADTを使用してアナリティック・ワークスペースのビューを作成する方法を示しています。

例A-3 自動ADTを使用してビューを作成するためのテンプレート

SET ECHO ON
SET SERVEROUT ON

CREATE OR REPLACE VIEW view_name AS
   SELECT column_first, column_next, column_n
      FROM TABLE(OLAP_TABLE(
         'analytic_workspace',
         '',
         'olap_command',
         'limit_map'));
/
COMMIT;
/
GRANT SELECT ON view_name TO PUBLIC;

例A-4「自動ADTを使用するTIMEディメンションのビュー」では例A-2「事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー」と同じビューが作成されますが、事前定義された表型を使用するかわりに、自動的にADTを生成します。ここでは、制限マップでAS句を使用してターゲット列のデータ型を指定しています。

例A-4 自動ADTを使用するTIMEディメンションのビュー

CREATE OR REPLACE VIEW time_cal_view AS
   SELECT time_id, cal_short_label, cal_end_date, cal_timespan
      FROM TABLE(OLAP_TABLE(
        'myaw_aw.myaw duration session',
        null,
        null,
        'DIMENSION time_id AS varchar2(32) FROM time WITH
           HIERARCHY time_parentrel
              INHIERARCHY time_inhier
           ATTRIBUTE cal_short_label AS VARCHAR2(32) from time_short_description
           ATTRIBUTE cal_end_date AS DATE            from time_end_date
           ATTRIBUTE cal_timespan AS NUMBER(6)       from time_time_span'));

ユーザーが制限マップのAS句でデータ型を指定しなかった場合、OLAP_TABLEがADTを自動生成する際にはターゲット列に対してデフォルトのリレーショナル・データ型が使用されます。OLAP_TABLEで使用されるデフォルトのデータ型変換については、表A-1「デフォルトのデータ型変換」を参照してください。

リレーショナル・ビューへの計算された列の追加

OLAP_TABLEでは、アナリティック・ワークスペースの多次元データを表形式で表すために制限マップを使用します。制限マップによって、論理表の列が特定されます。OLAP_EXPRESSIONファンクションを指定するか、または問合せのSELECT構文のリストにブール・ファンクション、テキスト・ファンクション、日付ファンクションのいずれかを指定することによって、計算された列をリレーショナル・ビューに追加できます。SELECT構文のリストにいずれかのファンクションを指定した場合は、そのファンクションの結果に対応する追加の列がOLAP_TABLEによって生成されます。

これらの式のいずれかを使用する前に、OLAP_TABLEで使用される制限マップにROW2CELL句を指定して、OLAP単一行ファンクションによって使用される情報を移入するRAW列を指定する必要があります。