注意: 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);