データベース上にビューを作成します。
CREATE [ OR REPLACE ] VIEW [ owner.]view-name [ ( column-name, ... ) ] AS query-expression [ WITH CHECK OPTION ]
OR REPLACE 句 OR REPLACE (CREATE OR REPLACE VIEW) を指定すると、ビューが作成されるか、同じ名前の既存のビューが置き換えられます。OR REPLACE 句を使用する場合、既存の権限は保持されますが、ビューの INSTEAD OF トリガは削除されます。
1 つ以上の INSTEAD OF トリガがあるビューで CREATE OR REPLACE VIEW 文を実行すると、エラーが返されます。ビューを変更または削除するには、その前にトリガを削除します。
AS 句 ビューのベースとなる SELECT 文です。SELECT 文はローカルテンポラリテーブルを参照してはなりません。また、query-expression には GROUP BY 句、HAVING 句、WINDOW 句、または ORDER BY 句を指定でき、UNION、EXCEPT、INTERSECT または共通テーブル式を含めることができます。
クエリのセマンティックは、SELECT 文で TOP 句または FIRST 句に ORDER BY 句を組み合わせないと、返されるローの順序が定義されないことを示します。
WITH CHECK OPTION 句 WITH CHECK OPTION 句を指定すると、query-expression で定義された条件を満たさないビューへの更新や挿入が拒否されます。
ビューは物理的にはテーブルとしてデータベースの中に存在しません。ビューは使用するたびに引き出されます。ビューは、CREATE VIEW 文で指定された SELECT 文の結果として引き出されます。ビューでは、同じ名前のテーブルと区別するために、テーブルの所有者のユーザ ID を指定することが推奨されます。
SELECT、DELETE、UPDATE、INSERT 文の中では、ビュー名をテーブル名の代わりに使用できます。
SELECT* は、メインクエリ、サブクエリ、派生テーブル、または、CREATE VIEW 文の subselect で使用できます。
クエリでは、ORDER BY 句がなくても、TOP n、FIRST、または LIMIT の句を指定できます。最大で指定数のローが返りますが、返ってくるローの順序は定義されません。そのため、ORDER BY は指定できますが、必須ではありません。クエリにビューが使用されている場合、たとえ FROM 句内に他のテーブルがなくても、ビュー内の ORDER BY は、クエリ内のローの順序に作用しません。このため、ORDER BY をビューに入れるのは、TOP n、FIRST、または LIMIT の句に含めるローを選択する必要がある場合だけにしてください。それ以外の場合、ORDER BY 句に効果はなく、データベースサーバはこの句を無視します。
ビューを定義する query-expression が GROUP BY 句、WINDOW 句、集合関数を含まないか、または集合演算子 (UNION、INTERSECT、EXCEPT) を伴わない場合は、ビューを更新できます。ビューを更新すると、基本となるテーブルも更新されます。
ビューのカラムには column-name リスト内で指定した名前が与えられます。column-name リストを指定しないと、ビューのカラムは SELECT リスト項目から名前が与えられます。SELECT リストのすべての項目がユニークな名前になるように指定します。SELECT リスト項目からの名前を使用するには、各項目を単純なカラム名にするか、エイリアス名を指定します。
SQL Anywhere では、query-expression の SELECT リスト内の名前のない式を、CREATE VIEW 文で参照できます。query-expression の SELECT リストの名前のない式には、名前 expression が割り当てられ、このような式が複数存在する場合、整数値と連結されます。たとえば、次の文は 3 つのカラム (expression、expression1、および expression2) を持つビュー V を定義し、これらの名前は作成されたビュー V の SYSCOLUMN システムビューに表示されます。
CREATE VIEW V AS SELECT DATEADD( DAY, 1, NOW() ), DATEADD( DAY, 2, NOW() ), DATEADD( DAY, 2, NOW() ) FROM SYS.DUMMY; |
名前のない SELECT リスト式を持つ他のビューにも同一の名前が割り当てられるため、これらの生成された名前に頼ることはおすすめしません。
一般的に、ビューはカタログに定義されているテーブルやビュー (およびその属性) を参照します。一方、ビューは SQL 変数も参照できます。この場合、ビューを参照するクエリが実行されると、SQL 変数の値が使用されます。SQL 変数を参照するビューは、変数がビューを実行するためのパラメータとして機能することから、「パラメータ化されたビュー」と呼ばれます。
パラメータ化されたビューは、等価の SELECT ブロックの本体を FROM 句内の派生テーブルとしてクエリに埋め込む手段を提供します。パラメータ化されたビューは、ビューで参照されている SQL 変数を入力パラメータとして取るようなストアドプロシージャに埋め込まれたクエリで便利です。
CREATE VIEW 文が実行されるときに SQL 変数が存在している必要はありません。ただし、ビューを参照するクエリを実行するときに SQL 変数が定義されていないと、カラム (変数) が見つからないことを示すエラーが返されます。
ユーザ本人が所有するビューを作成するには、CREATE VIEW システム権限が必要です。他のユーザが所有するビューを作成するには、CREATE ANY VIEW または CREATE ANY OBJECT のシステム権限が必要です。
ビューによって参照されるテーブルが他のユーザに所有されている場合は、それらのテーブルに対する SELECT 権限が必要です。
オートコミット。
SQL/2008 CREATE VIEW は SQL/2008 標準のコア機能ですが、SELECT 文に組み込まれている一部のビュー機能はオプションの言語機能です。ビュー定義で最上位レベルの SELECT 文で ORDER BY 句を指定する機能は、オプションの SQL/2008 言語機能 F852 です。ビューの結果セットを SELECT TOP または LIMIT を使用して制限する機能は、オプションの SQL/2008 言語機能 F859 です (SQL/2008 標準では、この操作を行うために FETCH 句を使用します)。ビューの SELECT 文に、集合または DISTINCT が関係する派生テーブルや、集合演算子 (INTERSECT、EXCEPT、UNION) が含まれている場合など、更新できないビューに対する WITH CHECK OPTION の指定は、オプションの SQL/2008 言語機能 T111 です。
CREATE VIEW の一部の機能は、ベンダー拡張です。パラメータ化されたビューは、オプションの OR REPLACE 構文や名前のない SELECT リスト式の名前の自動生成と同様に、ベンダー拡張です。
次の例は、男性従業員の情報のみを表示するビューを作成します。このビューはベーステーブルと同じカラム名を持ちます。
CREATE VIEW MaleEmployees AS SELECT * FROM GROUPO.Employees WHERE Sex = 'M'; |
次の例は、従業員と所属する部署を表示するビューを作成します。
CREATE VIEW EmployeesAndDepartments AS SELECT Surname, GivenName, DepartmentName FROM GROUPO.Employees JOIN GROUPO.Departments ON Employees.DepartmentID = Departments.DepartmentID; |
次の例は、前の例で作成された EmployeesAndDepartments ビューを置き換えます。置き換え後のビューには、各従業員の住所の市、州、国が表示されます。
CREATE OR REPLACE VIEW EmployeesAndDepartments AS SELECT Surname, GivenName, City, State, Country FROM GROUPO.Employees JOIN GROUPO.Departments ON Employees.DepartmentID = Departments.DepartmentID; |
次の例は、パラメータ化されたビューを変数 var1 と var2 に基づいて作成します。この 2 つは Employees テーブルの属性でも Departments テーブルの属性でもありません。
CREATE VIEW EmployeesByState AS SELECT Surname, GivenName, DepartmentName FROM GROUPO.Employees JOIN GROUPO.Departments ON Employees.DepartmentID = Departments.DepartmentID WHERE Employees.State = var1 and Employees.Status = var2; |
変数は、変数が式として許可されている任意のコンテキストで、ビューの SELECT 文に出現させることができます。たとえば、次のパラメータ化されたビューでは、パラメータ var1 を LIKE 述部のパターンとして使用しています。
CREATE VIEW ProductsByDescription AS SELECT * FROM GROUPO.Products WHERE Products.Description LIKE var1; |
このビューを使用するには、このビューを参照するクエリを実行する前に変数 var1 を定義します。たとえば、次の BEGIN 文はプロシージャ、関数、またはバッチ文に使用できます。
BEGIN DECLARE var1 CHAR(20); SET var1 = '%cap%'; SELECT * FROM ProductsByDescription END |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |