ALTER VIEW viewName AS query
ALTER VIEW viewName (column, column2, ...) AS query
ALTER VIEW viewName ... AS query WITH READ ONLY
ALTER VIEW viewName ... AS query WITH [LOCAL | CASCADED] CHECK OPTION
例
ビューの作成と変更
この例では、ビューを作成し、変更する方法を示します。ビューに対してクエリを実行する方法、およびビューを削除する方法も示します。
米国マサチューセッツ州に住む人の名前を含むビューを作成します。この例では、Sample.Person テーブルが既に存在し、Home_State 列が含まれていることを前提としています。
CREATE VIEW MassFolks (vFullName) AS
SELECT Name FROM Sample.Person WHERE Home_State='MA'
次に、通常のテーブルと同じように、ビューに対してクエリを実行できます。
SELECT * FROM MassFolks
ビューを変更して新しい列を含めます。ビューを変更すると、列リストが新しい列リストに置き換わりますが、既存の列リストは保存されません。このため、この変更されたビューには vMassAbbrev 列と vCity 列のみが含まれ、vFullName 列は含まれません。
ALTER VIEW MassFolks (vMassAbbrev,vCity) AS
SELECT Home_State,Home_City FROM Sample.Person WHERE Home_State='MA'
ビューを削除します。通常のテーブルと同じような方法でビューを削除できます。
DROP VIEW MassFolks
結合された SELECT クエリを使用したビューの変更
ビューを変更して、2 つの SELECT クエリの結果を結合したものを含めます。結果を結合するには、UNION コマンドを使用します。
ALTER VIEW MyView (vname,vstate) AS
SELECT t1.name,t1.home_state
FROM Sample.Person AS t1
UNION
SELECT t2.name,t2.office_state
FROM Sample.Employee AS t2
読み取り専用ビューの設定
ビューを変更し、このビューを介して基本テーブルが変更されないようにします。
ALTER VIEW YoungPeople AS
SELECT Name,DOB
FROM Sample.Person
WHERE DATEDIFF(year,DOB,CURRENT_DATE) <= 18
WITH READ ONLY
このビューを介して行を更新すると、WITH READ ONLY によって更新が阻止されます。
UPDATE YoungPeople (DOB)
VALUES (02/17/2022)
WHERE Name='Page,Laura O.'
ビューを介して行われたテーブルの変更の検証
GPA 基準を満たさない学生が挿入されないように、この特待生のビューを変更します。この例では、Sample.Student テーブルが既に存在することを前提としています。
ALTER VIEW HonorsStudent AS
SELECT Name, GPA
FROM Sample.Student
WHERE GPA > 3.0
WITH CHECK OPTION
GPA が非常に低い学生をこのビューに挿入しようとすると、VIEW CHECK OPTION によって挿入が阻止されます。
INSERT INTO HonorsStudent (Name, GPA)
VALUES ('Waal,Edgar P.',2.9)
セキュリティおよび特権
ALTER VIEW コマンドは特権を必要とする操作です。ALTER VIEW を実行するには、ユーザは %ALTER_VIEW 管理特権を持っている必要があります。持っていない場合、SQLCODE –99 エラーが発生し、%msg が "ユーザ 'name' は %ALTER_VIEW 特権を持っていません" に設定されます。
ユーザは、指定されたビューに対する %ALTER 特権を持っている必要があります。ユーザがビューの所有者 (作成者) である場合、ユーザにはそのビューに対する %ALTER 特権が自動的に付与されます。そうでない場合は、ユーザにビューに対する %ALTER 特権を付与する必要があります。持っていない場合、SQLCODE –99 エラーが発生し、%msg が "ユーザ 'name' はビュー 'Schema.ViewName' を変更する特権を持っていません" に設定されます。
適切な付与特権を保持している場合は、GRANT コマンドを使用して %ALTER_VIEW 特権と %ALTER 特権を割り当てることができます。
現在のユーザが %ALTER 特権を持っているかどうかを確認するには、%CHECKPRIV コマンドを呼び出します。指定のユーザが %ALTER 特権を持っているかどうかを確認するには、$SYSTEM.SQL.Security.CheckPrivilege()Opens in a new tab メソッドを呼び出します。
埋め込み SQL では、以下のように $SYSTEM.Security.Login()Opens in a new tab メソッドを使用して適切な特権を持ったユーザとしてログインできます。
DO $SYSTEM.Security.Login("myUserName","myPassword")
&sql(...)
$SYSTEM.Security.Login メソッドを呼び出すには、%Service_Login:Use 特権が必要です。詳細は、"インターシステムズ・クラス・リファレンス" の "%SYSTEM.SecurityOpens in a new tab" を参照してください。
ALTER VIEW は、導入済みの永続クラスから投影されたテーブルに基づくビューでは使用できません。この操作は SQLCODE -400 エラーで失敗し、%msg が “導入済みのクラス classname を変更する DDL を実行できません” に設定されます。