ビューの理解

ビューとは、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文を参照してください。

ビューの破棄

DROP VIEW文で、指定したビューが破棄されます。

次の文では、cust_orderビューが破棄されます。

Command> DROP VIEW cust_order;

ビューおよびディテール表に関する制限事項

ビューとそのディテール表には、特定の制限事項があります。

  • ビューがSELECT文のFROM句で参照されると、ビューの名前は、その定義によってSQLコンパイル時に導出表に置き換えられます。導出表の内容は、実体化と呼ばれますが、この実体化は一時的なもので、SQL文の存続期間中にのみ存在します。たとえば、ビューと参照しているSELECTの両方で集計が指定されている場合、ビューは、その結果がSELECTの他の表と結合される前にマテリアライズ化されます。

  • ビューは、DROP TABLE文では破棄できません。DROP VIEW文を使用する必要があります。

  • ビューは、ALTER TABLE文では変更できません。

  • ビューの参照は、ディテール表の破棄または変更が原因で失敗する可能性があります。