Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

ALTER VIEW

ビューを変更します。

Synopsis

ALTER VIEW view-name [(column-commalist)] AS query [WITH READ ONLY]

ALTER VIEW view-name [(column-commalist)] AS query [WITH [level] CHECK OPTION]

引数

view-name 変更するビュー名。テーブル名と同じ命名規則で変更します。
column-commalist オプション — ビューを構成する列名。ここで指定しない場合、列名は下に示すように query で指定されたものになります。
query ビューの基準となるクエリの結果セット。
WITH READ ONLY オプション — このビューの基になっているテーブルに対して、このビューからは挿入、更新、削除の各操作を実行できないようにすることを指定します。既定では、以下に示す制限の下で、ビューからこれらの操作ができるようになっています。
WITH level CHECK OPTION オプション — このビューの基になっているテーブルに対して、挿入、更新、削除の各操作を、このビューからどのように実行できるかを指定します。level には、キーワード LOCAL または CASCADED を指定できます。level を指定しない場合、WITH CHECK OPTION は既定で CASCADED になります。詳細は、"CREATE VIEW" を参照してください。

概要

ALTER VIEW コマンドを使用すると、ビューを変更できます。ビューは、1 つの SELECT 文で構成されたクエリ、または 2 つ以上の SELECT 文の UNION で構成されたクエリの結果セットに基づいています。UNION の使用方法の詳細は、"CREATE VIEW" を参照してください。

指定のビューが現在のネームスペースに存在するかどうかを確認するには、$SYSTEM.SQL.ViewExists()Opens in a new tab メソッドを使用します。

オプションの column-commalist はビューに含まれる列名を指定します。指定する列名は SELECT 文で指定したテーブル列の数および順序と一致させる必要があります。これらのビュー列名は SELECT 文で列名のエイリアスとして指定することもできます。どちらも指定していない場合は、テーブルの列名がビュー列名として使用されます。

以下の例では、この 2 つの方法でビュー列名を指定します。

ALTER VIEW MyView (MyViewCol1,MyViewCol2,MyViewCol3) AS
     SELECT TableCol1, TableCol2, TableCol3 FROM MyTable

上記の例は、以下と同じです。

ALTER VIEW MyView AS SELECT TableCol1 AS ViewCol1,
     TableCol2 AS ViewCol2,
     TableCol3 AS ViewCol3
     FROM MyTable

列を指定すると、ビューで指定されている既存の列はすべて置き換えられます。

ビュー・クエリには、ホスト変数INTO キーワードを格納できません。query でホスト変数を参照しようとすると、システムにより、SQLCODE -148 エラーが生成されます。

特権

ALTER VIEW コマンドは特権を必要とする操作です。ALTER VIEW を使用する前に、%ALTER_VIEW 管理者特権または指定されたビューに対する %ALTER オブジェクト特権があることを確認する必要があります。特権がない場合は、SQLCODE -99 エラー (特権違反) が返されます。%CHECKPRIV コマンドを呼び出すことにより、現在のユーザが %ALTER 特権を持っているかどうかを確認できます。$SYSTEM.SQL.CheckPriv()Opens in a new tab メソッドを呼び出すことにより、指定のユーザが %ALTER 特権を持っているかどうかを確認できます。適切な特権を持っている場合は、GRANT コマンドを使用して %ALTER_VIEW 特権または %ALTER 特権を割り当てることができます。

埋め込み SQL では、以下のように $SYSTEM.Security.Login()Opens in a new tab メソッドを使用して適切な特権を持ったユーザとしてログインできます。

   DO $SYSTEM.Security.Login("_SYSTEM","SYS")
   &sql(      )

$SYSTEM.Security.Login メソッドを呼び出すには、%Service_Login:Use 特権が必要です。詳細は、"インターシステムズ・クラス・リファレンス" の "%SYSTEM.SecurityOpens in a new tab" を参照してください。

以下の例ではビューを作成し、変更します。ビューのクエリおよびビューの削除を行うためのプログラムが用意されています。ビューを変更すると、列リストが新しい列リストに置き換わります。既存の列リストは保存されません。

  IF $SYSTEM.SQL.ViewExists("MassFolks")
     {WRITE "View already exists, please run DROP VIEW"  QUIT}
  &sql(CREATE VIEW MassFolks (vFullName) AS
       SELECT Name FROM Sample.Person WHERE Home_State='MA')
  IF SQLCODE=0 { WRITE !,"Created a view",! }
  ELSE { WRITE "CREATE VIEW error SQLCODE=",SQLCODE }
SELECT * FROM MassFolks
  IF 0=$SYSTEM.SQL.ViewExists("MassFolks")
     {WRITE "View doesn't exist"  QUIT}
  &sql(ALTER VIEW MassFolks (vMassAbbrev,vCity) AS
     SELECT Home_State,Home_City FROM Sample.Person WHERE Home_State='MA')
  IF SQLCODE=0 { WRITE !,"Altered view",! }
  ELSE { WRITE "ALTER VIEW error SQLCODE=",SQLCODE }
  DROP VIEW MassFolks

以下の埋め込み SQL の例では、クエリの WITH CHECK OPTION を使用してビューを変更します。

   DO $SYSTEM.Security.Login("_SYSTEM","SYS")
   &sql(ALTER VIEW Sample.MyTestView AS
     SELECT FIRSTWORD FROM Sample.MyTest WITH CHECK OPTION)
    IF SQLCODE=0 { WRITE !,"Altered view" }
    ELSE { WRITE "ALTER VIEW error SQLCODE=",SQLCODE }

関連項目

FeedbackOpens in a new tab