プライマリ・コンテンツに移動
Oracle® Database SQL言語リファレンス
12cリリース1 (12.1)
B71278-13
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

SYS_OP_ZONE_ID


注意:

SYS_OP_ZONE_IDファンクションは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

構文

sys_op_zone_id.gifの説明が続きます。
図sys_op_zone_id.gifの説明

用途

SYS_OP_ZONE_IDは、ROWIDを引数として、ゾーンIDを戻します。ROWIDは表の行を識別します。ゾーンIDは、行を含むゾーンと呼ばれる連続したディスク・ブロックのセットを識別します。戻り値はNUMBERです。

CREATE MATERIALIZED ZONEMAP文を使用してゾーン・マップを作成する場合、SYS_OP_ZONE_IDファンクションが使用されます。ゾーン・マップの定義する副問合せのSELECTおよびGROUP BY句にSYS_OP_ZONE_IDを指定する必要があります。

rowidの場合、ゾーン・マップのファクト表のROWID疑似列を指定します。

schemaおよびtableを使用してファクト表のスキーマと名前を指定するか、t_aliasを使用してファクト表の表の別名を指定します。これらのパラメータの指定は、ゾーン・マップの定義する副問合せのFROM句によって異なります。

オプションのscaleパラメータは、ゾーン・マップのスケールを表します。デフォルトでSYS_OP_ZONE_IDは作成されるゾーン・マップのスケールを使用するため、このパラメータを指定する必要はありません。scaleを指定する場合、作成されるゾーン・マップのスケールを照合する必要があります。ゾーン・マップのスケールの指定の詳細は、CREATE MATERIALIZED ZONEMAPSCALE句を参照してください。


関連項目:

ゾーン・マップの作成の詳細は、CREATE MATERIALIZED ZONEMAPを参照してください。

次の例は、ファクト表salesの列time_idを追跡する基本的なゾーン・マップを作成する場合にSYS_OP_ZONE_IDファンクションを使用します。ゾーン・マップのスケールはデフォルト値10です。このため、SYS_OP_ZONE_IDファンクションのデフォルトのスケール値は10になります。

CREATE MATERIALIZED ZONEMAP sales_zmap
AS
  SELECT SYS_OP_ZONE_ID(rowid), MIN(time_id), MAX(time_id)
  FROM sales
  GROUP BY SYS_OP_ZONE_ID(rowid);

作成されるゾーン・マップのスケールに8が指定されている点を除いて、次の例は前の例と似ています。このため、SYS_OP_ZONE_IDファンクションのデフォルトのスケール値は8になります。

CREATE MATERIALIZED ZONEMAP sales_zmap
SCALE 8
AS
  SELECT SYS_OP_ZONE_ID(rowid), MIN(time_id), MAX(time_id)
  FROM sales
  GROUP BY SYS_OP_ZONE_ID(rowid);

作成されるゾーン・マップのスケールにSYS_OP_ZONE_IDファンクションで指定されているscale引数12と一致しない8が指定されているため、次の例はエラーを戻します。

CREATE MATERIALIZED ZONEMAP sales_zmap
SCALE 8
AS
  SELECT SYS_OP_ZONE_ID(rowid,12), MIN(time_id), MAX(time_id)
  FROM sales
  GROUP BY SYS_OP_ZONE_ID(rowid,12);

次の例は、結合ゾーン・マップを作成します。ファクト表がsalesで、ディメンション表がproductscustomersです。表の別名sFROM句のファクト表に指定されているため、表の別名sSYS_OP_ZONE_IDファンクションにも指定されます。

CREATE MATERIALIZED ZONEMAP sales_zmap
AS
  SELECT SYS_OP_ZONE_ID(s.rowid),
         MIN(prod_category), MAX(prod_category),
         MIN(country_id), MAX(country_id)
  FROM sales s, products p, customers c
  WHERE s.prod_id = p.prod_id(+) AND
        s.cust_id = c.cust_id(+)
  GROUP BY SYS_OP_ZONE_ID(s.rowid);