SYS_OP_ZONE_ID

構文

目的

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句によって異なります。

  • FROM句でファクト表の表の別名を指定する場合、SYS_OP_ZONE_IDに表の別名(t_alias)も指定する必要があります。

  • FROM句でファクト表の表の別名を指定しない場合、tableを使用してファクト表の名前を指定します。他のスキーマ内にファクト表が存在している場合、schema修飾子を使用できます。schemaを省略する場合、ファクト表は自分のスキーマ内にあるとみなされます。FROM句で1つの表(ファクト表)のみを指定する場合、schemaまたはtableを指定する必要はありません。

オプションの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);