4D v16

CREATE VIEW

ホーム

 
4D v16
CREATE VIEW

CREATE VIEW  


 

 

CREATE [OR REPLACE] VIEW [schema_name.]view_name [(column_list)] AS select_statement[;]

説明  

CREATE VIEW コマンドは、 column_list 引数で定義された列を内包する、view_name (標準の sql_name)という名前を持った SQL ビューを作成します。この列が関数であるか、または演算操作によって作成されたものである場合は列の名前を指定する必要があります。異なる列に同じ名前が付くことを避けたい場合(JOIN 操作の途中など)や、元になった列と異なる名前を使用したい場合なども列の名前を指定する必要があります。

column_list 引数を渡す場合、引数には、ビューの select_statement の定義クエリの中にある列の数と同じ数が入っていなければなりません。もしcolumn_list が省略された場合、ビューの列の名前は、ビューの select_statement 内の列と同じ名前になります。

ビューとテーブルは固有の名前を持たなければなりません。

OR REPLACE オプションを渡した場合、ビューが既に存在する場合には自動的に作成されなおされます。このオプションは、カレントのビュー内で定義済みのオブジェクトを、消去/再作成/権利の割り当て等をすることなく既存のビューの定義を変えたい時には有用なオプションです。
ビューが既に存在していて OR REPLACE オプションを渡さなかった場合には、エラーが返されます。

schema_name も標準の sql_name で、ビューを格納するスキーマの名前を指定するのに使用することができます。schema_name を渡さなかった場合、もしくは存在しないスキーマの名前を渡した場合には、ビューは自動的に "DEFAULT_SCHEMA" という名前の標準のスキーマへと割り当てられます。

select_statement はビューの定義クエリである SELECT を指定します。select_statement は 4D の標準の SELECT と同じですが、以下の様な制限がつきます:

  • INTOLIMITOFFSET 節を使用することはできません。なぜなら 4Dでの限界、オフセット、変数の割り当てはビューを呼び出す SELECT によって実行されるからです。
  • GROUP BY 節は使用できません。
  • ビューは読み出し専用モードとなっており、更新はできません。

ビュー定義は静的であり、ソースとなるテーブルが変更されたり削除されたりしてもアップデートされることはありません。つまりあるテーブルに列が追加されても、そのテーブルを参照しているビューには列は表示されないという事です。同じように、削除済みの列にビューを通してアクセスしようとした場合、エラーが返されます。
ただし、削除済みのソースビューを参照しているビューは動き続けます。なぜなら、ビューを作成する時点で、どんなビュー参照もソーステーブルの参照へと変換されるからです。

ビューはグローバルなスコープを持ちます。CREATE VIEW を使用してビューが作成されると、それはアプリケーション内の全ての部分(SQLを使用する4Dリモート、 CREATE DATABASE コマンドを使用する外部データベース、 SQL LOGIN コマンドを使用する他のデータベース、等々)からアクセス可能となり、その状態は DROP VIEW コマンドを使用してビューが削除されるか、データベースが閉じられるまで続きます。

例題  

PEOPLE という名前の、以下の列を含むテーブルについて考えます:

IDINT64
FIRST_NAMEVARCHAR(30)
LAST_NAMEVARCHAR(30)
DEPARTMENTVARCHAR(30)
SALARYINT

ビュー定義には以下の様な例があります。

制限のないビュー:

CREATE VIEW FULLVIEW AS
        SELECT * FROM PERSONS;

「水平的な」制限のあるビュー。例えば、マーケティング部にいる人間のみを表示したい場合、以下の様に記述します:

CREATE VIEW HORIZONTALVIEW (ID, FirstName, LastName, Salary) AS
        SELECT ID, FIRST_NAME, LAST_NAME, SALARY FROM PERSONS
        WHERE DEPARTMENT = 'Marketing';

合算されたビュー:

CREATE VIEW AGGREGATEVIEW (FirstName, LastName AnnualSalary) AS
        SELECT FirstName, LastName, SALARY*12 FROM PERSONS;

「垂直的な」制限のあるビュー。例えば、SALARY の列を表示したくない場合は、以下の様に記述します:

CREATE VIEW VERTICALVIEW (ID, FirstName, LastName, Department) AS
        SELECT ID, FIRST_NAME, LAST_NAME, DEPARTEMENT FROM PERSONS;

一度ビューが定義されれば、そのビューは標準のテーブルと同じように使用することが出来ます。例えば、給料が 5,000 ユーロを超える人間を全て取得したい場合、以下の様に記述します:

SELECT * FROM FULLVIEW
    WHERE SALARY < 5000
    INTO :aID, :aFirstName, :aLastName, :aDepartment, :aSalary;

また、例えばマーケティング部の中で "Michael" という名前を持つ人間を全て取得したい場合、以下の様に記述します:

SELECT ID, LastName, Salary FROM HORIZONTALVIEW
    WHERE FirstName='Michael'
    INTO :aID, :aLastName, :aSalary;



参照 

DROP VIEW

 
プロパティ 

プロダクト: 4D
テーマ: SQLコマンド

 
履歴 

 
ARTICLE USAGE

SQLリファレンス ( 4D v16)