ビューの理解
ビューとは、1つ以上の表に基づく論理表です。ビュー自体にデータは含まれていません。これは、ディテール表の計算済データを含むマテリアライズド・ビューと区別するために、非マテリアライズド・ビューと呼ばれることもあります。
ビューは直接更新できませんが、ディテール表のデータへの変更はただちにビューに反映されます。
ビューは、基本的には、データベースに格納さたSQL文となり、これにより、SQL問合せの結果を表自体として処理できるようにします。TimesTenでは、ビューを問い合せるたびにそのビューの結果が生成されるため、ビューのデータ結果は常に最新です。ビューは、通常の表の問合せと同様に問い合せることができます。
マテリアライズド・ビューを使用すると、負荷の高いSQL操作を事前に計算できます。主に読取り専用データベースの問合せの結果を事前計算し、マテリアライズド・ビューに格納することで、SELECT
操作の速度を向上させることができる場合があります。この場合のデメリットは、マテリアライズド・ビューには追加の記憶領域が必要になることです。マテリアライズド・ビューのディテール表に対してDML操作を実行するときには、これらのDML操作はリソースを大量に消費し、マテリアライズド・ビューの行を格納する追加の記憶域が必要になることに注意してください。表に対して使用するマテリアライズド・ビューの数が多すぎると、その表のパフォーマンスが低下することがあります。
ユーザーは、ビューの作成、破棄または管理の操作を実行するには適切な権限が必要です。それらの権限については、『Oracle TimesTen In-Memory Database SQLリファレンス』のSQL文の章で、すべてのSQL文の構文とともに説明されています。
この項の内容は次のとおりです。
ビューの作成
ビューを作成するには、SQL文CREATE VIEW
を使用します。
すべてのSQL文の構文については、Oracle TimesTen In-Memory Database SQLリファレンスのSQL文の章を参照してください。
CREATE VIEW ViewName AS SelectQuery;
これによって、ビューで使用される列がディテール表から選択されます。
たとえば、表t1
からビューを作成します。
Command> CREATE VIEW v1 AS SELECT * FROM t1;
次に、表t1
に対する集計問合せからビューを作成します。
Command> CREATE VIEW v1 (max1) AS SELECT max(x1) FROM t1;
CREATE VIEW文でのSELECT問合せ
マテリアライズド・ビューの内容を定義するために使用するSELECT
問合せは、トップレベルのSELECT
SQL文に似ています。
マテリアライズド・ビューの内容を定義するために使用するSELECT
問合せには、次の制限事項があります:
-
ビュー定義内の
SELECT *
問合せは、ビュー作成時に拡張されます。ビューが作成された後に追加された列は、ビューに反映されません。 -
ビューを作成する
SELECT
文で、次の句は使用できません。 -
DISTINCT
-
FIRST
-
ORDER BY
-
引数
-
一時表
-
SELECT構文のリストの各式には、一意の名前が必要です。列の別名が定義されていないかぎり、単純にその列の名前が使用されます。ROWIDは式とみなされるため、別名が必要です。
-
SELECT FOR UPDATE
またはSELECT FOR INSERT
文はビューに対しては使用できません。 -
特定のTimesTen問合せ制限は、非マテリアライズド・ビューの作成時に確認されません。これらの制限に違反しているビューの作成が可能な場合がありますが、その後、処理した文でこのビューが参照されると、エラーが戻されます。
『Oracle TimesTen In-Memory Database SQLリファレンス』のSQL文を参照してください。
ビューおよびディテール表に関する制限事項
ビューとそのディテール表には、特定の制限事項があります。
-
ビューが
SELECT
文のFROM
句で参照されると、ビューの名前は、その定義によってSQLコンパイル時に導出表に置き換えられます。導出表の内容は、実体化と呼ばれますが、この実体化は一時的なもので、SQL文の存続期間中にのみ存在します。たとえば、ビューと参照しているSELECTの両方で集計が指定されている場合、ビューは、その結果がSELECTの他の表と結合される前にマテリアライズ化されます。 -
ビューは、
DROP TABLE
文では破棄できません。DROP VIEW
文を使用する必要があります。 -
ビューは、
ALTER TABLE
文では変更できません。 -
ビューの参照は、ディテール表の破棄または変更が原因で失敗する可能性があります。