視点は 1 つまたは複数の基礎表、ニックネーム、または視点から導出されるもので、 データの検索時には基礎表と交換可能なものとして使用されます。 視点の中に表示されるデータに変更が加えられると、表そのもののデータも変更されます。
視点を作成することによって、重要データについてはアクセスを限定し、 その他のデータについては一般にアクセスを許可することができます。
視点定義の SELECT リストに、基礎表の識別列の名前が直接または間接的に含まれている場合、 その視点に挿入を実行するときには、 INSERT ステートメントが基礎表の識別列を直接参照している場合と同じ規則が適用されます。 INSERT ステートメントの詳細については、を参照してください。
上記のような視点の使用に加えて、次のような目的で視点を使用することができます。
標準の CREATE VIEW 構文を使ってニックネームを参照する視点を作成すると、 基礎オブジェクトへのアクセスに視点作成者認証 ID ではなく視点ユーザーの認証 ID が使用されるという事実に注意を促す警告が表示されます。 この警告を表示しないようにするには、FEDERATED キーワードを使用します。
視点を作成する代わりにネストした表式または共通表式を使うこともできます。 その場合、カタログ参照が少なくなり、パフォーマンスは高くなります。 共通表式についての詳細は、を参照してください。
コントロール・センターを使用して視点を作成するには、以下のようにします。
|
コマンド行を使用して視点を作成するには、以下のように入力します。
CREATE VIEW <name> (<column>, <column>, <column>) SELECT <column_names> FROM <table_name> WITH CHECK OPTION
たとえば、EMPLOYEE 表には給与に関する情報が入っているかもしれませんが、 そうした情報はだれもが利用できるようにすべきではありません。 しかし、従業員の電話番号はだれでもアクセスできるようにすべきです。 このような場合は、LASTNAME 列と PHONENO 列だけからなる視点を作成できます。 視点へのアクセスは PUBLIC に与えるようにし、EMPLOYEE 表全体へのアクセスは、 給与情報を見る権限のある人だけに制限するようにします。 読み取り専用 視点についての詳細は、 を参照してください。
視点を使うと、表データのうちアプリケーション・プログラムで利用できるサブセットを作成し、 挿入または更新するデータの妥当性検査を実行することができます。 視点の列名は、元の表の対応する列名と違うものにすることができます。
視点を使うと、 プログラムやエンド・ユーザー照会で表データを見る方法の点で柔軟性が高くなります。
以下の SQL ステートメントは、EMPLOYEE 表に 1 つの視点を作成しますが、 この視点は部門 A00 のすべての従業員を、従業員番号と電話番号の情報とともにリストします。
CREATE VIEW EMP_VIEW (DA00NAME, DA00NUM, PHONENO) AS SELECT LASTNAME, EMPNO, PHONENO FROM EMPLOYEE WHERE WORKDEPT = 'A00' WITH CHECK OPTION
このステートメントの最初の行では、視点の名前を指定し、その列を定義しています。 EMP_VIEW という名前は、 SYSCAT.TABLES の中のそのスキーマ内で固有なものでなければなりません。 視点名は表名の 1 つとして表示されますが、データは含まれていません。 この視点の列は DA00NAME、 DA00NUM、および PHONENO の 3 つであり、 それぞれ、 EMPLOYEE 表の LASTNAME、EMPNO、 および PHONENO の列に対応するものです。 最初の行に指定する列名は、SELECT ステートメントの選択リストに 1 対 1 に対応します。 列名を指定しないなら、視点の列名には、 SELECT ステートメントの結果表の列と同じ名前が使われます。
第 2 行は、データベースから選択する値について記述する SELECT ステートメントです。 これには、ALL、DISTINCT、FROM、WHERE、GROUP BY、 および HAVING という文節を含めることができます。 視点のための列を選択する元のデータ・オブジェクトの名前を、 FROM 文節の後に指定します。
WITH CHECK OPTION 文節は、 視点に対して更新する行または挿入する行を視点定義に照らして検査し、 定義に従っていない場合には拒否することを指定するものです。 これによってデータ保全性は向上しますが、余分な処理が必要になります。 この文節を省略すると、 挿入する行または更新する行が視点定義に照らして検査されることはありません。
次の SQL ステートメントは、EMPLOYEE 表に基づく同じ視点を、 SELECT AS 文節を使って作成するものです。
CREATE VIEW EMP_VIEW SELECT LASTNAME AS DA00NAME, EMPNO AS DA00NUM, PHONENO FROM EMPLOYEE WHERE WORKDEPT = 'A00' WITH CHECK OPTION
定義の中で UDF を使う視点を作成することもできます。 ただし、この視点を最新の関数が含まれるように更新するためには、 その視点を除去してから再作成しなければなりません。 視点が UDF に依存している場合、その関数は除去できません。
次の SQL ステートメントは、定義内に関数の含まれる視点を作成するものです。
CREATE VIEW EMPLOYEE_PENSION (NAME, PENSION) AS SELECT NAME, PENSION(HIREDATE,BIRTHDATE,SALARY,BONUS) FROM EMPLOYEE
UDF 関数の PENSION によって、従業員が現時点で受け取ることのできる年金が計算されます。 その計算には、HIREDATE、BIRTHDATE、SALARY、および BONUS が使われます。
CREATE VIEW ステートメントを使用してタイプ付き視点を作成できます。 タイプ付き視点に関する必要なすべての情報については、 を参照してください。