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?

DROP VIEW

ビューを削除します。

Synopsis

DROP VIEW view-name [CASCADE | RESTRICT]

引数

view-name 削除するビューの名前。
CASCADE RESTRICT オプションview-name を参照する他のすべてのビューを削除する場合は CASCADE キーワードを指定します。RESTRICT は、view-name を参照するビューが他に存在するときに SQLCODE -321 エラーを発行する場合に指定します。既定値は RESTRICT です。

概要

DROP VIEW コマンドはビューを削除しますが、基となるテーブルやデータは削除しません。

DROP VIEW 操作は、DropView()Opens in a new tab メソッド呼び出しを使用して呼び出すこともできます。

$SYSTEM.SQL.DropView(viewname,SQLCODE,%msg)

特権

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

埋め込み 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" を参照してください。

存在しないビュー

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

存在しないビューを削除しようとすると、DROP VIEW は既定で SQLCODE -30 エラーを発行します。ただし、システム構成を以下のように設定することにより、このエラー報告動作をオーバーライドできます。

  • $SYSTEM.SQL.SetDDLNo30()Opens in a new tab メソッド呼び出し。現在の設定を確認するには、$SYSTEM.SQL.CurrentSettings()Opens in a new tab を呼び出します。これにより、[SQLCODE=-30 エラーの抑制] の設定が表示されます。

  • 管理ポータルに進み、システム, 構成, 一般SQL設定 を選択します。[存在しないテーブルまたはビューの DDL DROP を許可する] の現在の設定を表示します。

既定値は “いいえ” (0) です。この設定を推奨します。存在しないビューおよびテーブルに対して DROP VIEW および DROP TABLE の処理をせず、エラー・メッセージも発行しない場合は、“はい” (1) に設定します。

他のビューから参照されるビュー

クエリで他のビューから参照されているビューを削除しようとすると、DROP VIEW は既定で SQLCODE -321 エラーを発行します。これは RESTRICT キーワードの動作です。

CASCADE キーワードを指定すると、クエリで他のビューによって参照されているビューの削除は成功します。さらに、DROP VIEW はそれらの参照しているビューも削除します。Caché で (SQLCODE -300 エラーなどにより) ビューのカスケード削除が一部でも実行できない場合は、いずれのビューも削除されません。

関連付けられたクエリ

ビューを削除すると、自動的にすべての関連クエリ・キャッシュが削除され、%SYS.PTools.SQLQueryOpens in a new tab に保存されているクエリ情報が削除されます。ビューを削除すると、関連する全クエリのためのすべての SQL 実行時統計 (SQL Stats) 情報が自動的に削除されます。

以下の埋め込み SQL 例は、"CityAddressBook" という名前のビューを作成し、その後そのビューを削除します。このビューは RESTRICT キーワード (既定) を使用して指定されるので、ビューが他のビューから参照される場合、SQLCODE -321 エラーが発行されます。

  &sql(CREATE VIEW CityAddressBook AS
     SELECT Name,Home_Street FROM Sample.Person 
     WHERE Home_City='Boston')
  IF SQLCODE=0 { WRITE !,"View created" }
  ELSE { WRITE !,"CREATE VIEW error: ",SQLCODE
         QUIT } 
  /* Use the view */
  NEW SQLCODE,%msg
  &sql(DROP VIEW CityAddressBook RESTRICT) 
  IF SQLCODE=0 { WRITE !,"View dropped" }
  ELSEIF SQLCODE=-30 { WRITE !,"View non-existent",!,%msg }
  ELSEIF SQLCODE=-321 { WRITE !,"View referenced by other views",!,%msg }
  ELSE { WRITE !,"Unexpected DROP VIEW error: ",SQLCODE,!,%msg }

関連項目

FeedbackOpens in a new tab