# CREATE VIEW 文

ビューとはクエリにより定義された仮想的な表です。表は破棄するまで利用可能なディクショナリの情報です。ビューは更新できません。

限定されたビューの名前にて、スキーマ名はSYSで始まってはなりません。

ビューの所有者は自動的にSELECT権限を得ます。ビューの所有者からSELECT権限を剥奪することはできません。データベースの所有者は自動的にビューへのSELECT権限を持ち、SELECT権限を他のユーザに付与することができます。データベースの所有者からSELECT権限を剥奪することはできません。

ビューの所有者はビューが参照する情報を所有する場合のみ、他のユーザにSELECT権限を付与することができます。

ビューの所有者が、ビューが参照する情報を所有していない場合、ビューの所有者は適切な権限を付与されていなければなりません。例えば、`user2`という認証識別子が`user1.t1`という表と`user1.f_abs()`という関数を参照する、`user2.v2`というビューを作成する場合、`user2`は`user1.t1`へのSELECT権限と`user1.f_abs()へのEXECUTE権限を持たなければなりません。`.

SELECT権限を付与する権限は剥奪できません。ビューが参照する情報への必要な権限が剥奪された場合、ビューは破棄されます。

#### 構文

    CREATE VIEW ビュー名
        [ ( 単純列名 [, 単純列名] * ) ]
    AS 問い合わせ

ビューの定義にビューの列一覧を書くことで、ビューの列に明示的な名前を与えることができます。 ビューの列一覧がない場合、ビューの列名は元となる問い合わせの列名を引継ぎます。ビューの全列は一意な名前を持たなければなりません。

    CREATE VIEW SAMP.V1 (COL_SUM, COL_DIFF)
    	AS SELECT COMM + BONUS, COMM - BONUS
    	FROM SAMP.EMPLOYEE;

    CREATE VIEW SAMP.VEMP_RES (RESUME)
    	AS VALUES 'Delores M. Quintana', 'Heather A. Nicholls', 'Bruce Adamson';

    CREATE VIEW SAMP.PROJ_COMBO
    	(PROJNO, PRENDATE, PRSTAFF, MAJPROJ)
    	AS SELECT PROJNO, PRENDATE, PRSTAFF, MAJPROJ
    	FROM SAMP.PROJECT UNION ALL
    SELECT PROJNO, EMSTDATE, EMPTIME, EMPNO
    	FROM SAMP.EMP_ACT
    	WHERE EMPNO IS NOT NULL;

#### 文の依存

ビューの定義は参照する表やビューに依存します。 ビューを参照するDML(data manipulation language)文は、ビューが依存するのと同様に、そのビューに依存します。 ビューを参照する文は、ビューが利用する索引に依存します。この索引は問い合わせがどのように最適化されるかに応じて文毎に異なります。 例を以下に挙げます。

    CREATE TABLE T1 (C1 DOUBLE PRECISION);

    CREATE FUNCTION SIN (DATA DOUBLE)
    	RETURNS DOUBLE EXTERNAL NAME 'java.lang.Math.sin'
    	LANGUAGE JAVA PARAMETER STYLE JAVA;

    CREATE VIEW V1 (C1) AS SELECT SIN(C1) FROM T1;

文とそれが依存するデータベースの情報を挙げます。

    SELECT * FROM V1

V1というビュー、T1という表、 外部のスカラー関数のSIN

Parent topic: CREATE 文
Related reference
CREATE FUNCTION 文
CREATE INDEX 文
CREATE PROCEDURE 文
CREATE SCHEMA 文
CREATE SYNONYM 文
CREATE TABLE 文
CREATE TRIGGER 文