ヘッダーをスキップ

Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド リリース6.0 B25770-01 |
| 目次 | 索引

前へ | 次へ |

## CREATE MATERIALIZED VIEW

CREATE MATERIALIZED VIEW文は、SelectQuery句で指定された表に対するビューを作成します。ビューを作成するために使用された元の表は、ディテール表と呼ばれます。

アクセス制御

TimesTenインスタンスでアクセス制御が有効な場合、この文にはDDL権限が必要です。

SQL構文
CREATE MATERIALIZED VIEW ViewName AS SelectQuery
[PRIMARY KEY (ColumnName [,...])]
[UNIQUE HASH ON (HashColumnName [,...])
PAGES = PrimaryPages]
パラメータ

CREATE MATERIALIZED VIEW文には、次のパラメータがあります。

ViewName | 新しいビューに割り当てる名前を指定します。
SelectQuery | ビューで使用される、ディテール表の列を選択します。ビューに対して索引を作成することも可能です。
ColumnName | 作成されるビューの主キー列の名前を指定します。主キーには最大16列を指定できます。ビュー表の結果列の名前は、一意である必要があります。表または所有者の要素を列名の定義に含めることはできません。
HashColumnName | ビューに定義された列をこの表のハッシュ・キーに含めます。ハッシュ索引に指定された列は、主キーに指定された列と同じである必要があります。
PrimaryPages | 表の想定ページ数を指定します。この数値に基づいて、ハッシュ索引用に作成されるハッシュ・バケットの数が決まります。最小値は1、最大値は268,435,256（228/256）です。想定したページ数が少なすぎると、パフォーマンスが低下します。詳細は、「CREATE TABLE」を参照してください。

説明

### ビューとディテール表の制限事項

- ビューは読取り専用であり、直接更新できません。ビューの更新は、関連付けられたディテール表が変更された場合にのみ実行されます。このため、ビューでDELETE、UPDATEまたはINSERT文を実行することはできません。
- マテリアライズド・ビューが更新されたときに、オーバーフローまたはアンダーフロー状態が発生するように指定されている場合、レプリケートされた表に定義されたマテリアライズド・ビューで、レプリケーション障害または非一貫性が発生する場合があります。
- ディテール表はレプリケートできますが、ビュー自体はレプリケートできません。ディテール表がレプリケートされると、対応するビューがTimesTenによって自動的に更新されます。
- ビューとそのディテール表は、いずれもキャッシュ・グループの構成要素にすることはできません。
- ビューやディテール表に対して、TimesTenが自動的に索引を作成することはありません。ビューに対して参照索引は定義できません。
- ビューの削除にDROP TABLE文を使用することはできません。DROP VIEW文を使用する必要があります。
- ビューの変更にALTER TABLE文を使用することはできません。DROP VIEW文を使用し、その後でCREATE MATERIALIZED VIEW文を使用して新しいビューを作成する必要があります。

### MATERIALIZED VIEW問合せの制限

ビューの定義に使用される問合せには、いくつかの制限があります。

- ビュー定義のSELECT *問合せは、ビューの作成時に実行されます。ビューの作成後に追加された列は、ビューには反映されません。
- 一時表は、マテリアライズド・ビュー定義では使用できません。非マテリアライズド・ビューおよび導出表は、マテリアライズド・ビューを定義するときに使用できません。
- GROUP BYのリストに含まれるすべての列が、SELECT構文のリストに含まれている必要があります。
- 集計ビューのSELECT構文のリストに、COUNT(*)が含まれている必要があります。
- SUMとCOUNTは使用可能です。ただし、AVGのように、それらを利用する式は使用できません。
- 次の句はビュー作成のSELECT文で使用できません。

- DISTINCT
- FIRST
- HAVING
- ORDER BY
- UNION
- UNION ALL
- JOIN
- ユーザー関数: USER、CURRENT_USER、SESSION_USER
- 副問合せ
- NEXTVALおよびCURRVAL
- 導出表

- SELECT構文のリストの各式には、一意の名前が必要です。列の別名が定義されていないかぎり、単純にその列の名前が使用されます。ROWIDは式とみなされるため、別名が必要です。
- SELECT FOR UPDATEまたはSELECT FOR INSERT文は、ビューでは使用できません。
- OUTER JOINは使用できますが、SELECTリストは、OUTER JOINに指定した各内部表に1つ以上のNULL値可能でない列を投影する必要があります。マテリアライズド・ビューの定義でのSELECTの外部結合構文は、トップ・レベルのSELECTの場合と同じです。SELECT文に対する制限が適用されます。マテリアライズド・ビューのOUTER JOINを指定するには、（+）記号を使用する必要があります。
- 自己結合を使用できます。自己結合とは、表をその表自体に結合することです。この表はFROM句に2度現れ、その後ろに表の別名が続き、結合条件に使用する列名を修飾します。TimesTenの今回のリリースで自己結合を使用して作成したマテリアライズド・ビューは、以前のリリースでは正しく動作しません。

##### 例13.28

customer表とbookOrder表の列からマテリアライズド・ビューを作成します。

    CREATE MATERIALIZED VIEW CustOrder AS
    SELECT custNo, custName, ordNo, book
    FROM customer, bookOrder
    WHERE customer.custNo=bookOrder.custNo;

##### 例13.29

t1表のx1およびy1列からマテリアライズド・ビューを作成します。

    CREATE MATERIALIZED VIEW v1 AS SELECT x1, y1 FROM t1
    PRIMARY KEY (x1) UNIQUE HASH (x1) PAGES=100;

##### 例13.30

表t1とt2の列x1およびy1の外部結合から、マテリアライズド・ビューを作成します。

    CREATE MATERIALIZED VIEW v2 AS SELECT x1, y1 FROM t1, t2
    WHERE x1=x2(+);

関連項目

CREATE TABLE
CREATE VIEW
DROP VIEW