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

用途
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 ZONEMAPのSCALE句を参照してください。
例
次の例は、ファクト表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で、ディメンション表がproductsとcustomersです。表の別名sがFROM句のファクト表に指定されているため、表の別名sがSYS_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);