Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

DROP VIEW (SQL)

ビューを削除します。

Synopsis

DROP VIEW [IF EXISTS] view-name [CASCADE | RESTRICT]

引数

IF EXISTS オプション — 存在しないビューに対してコマンドが実行される場合にエラーを抑制します。詳細は、存在しないテーブルに関する以下のセクションを参照してください。
view-name 削除するビューの名前。ビュー名は修飾 (schema.viewname)、未修飾 (viewname) のどちらでもかまいません。ビュー名が未修飾の場合は、既定のスキーマ名が使用されます。
CASCADE RESTRICT オプションview-name を参照する他のすべてのビューを削除する場合は CASCADE キーワードを指定します。RESTRICT は、view-name を参照するビューが他に存在するときに SQLCODE -321 エラーを発行する場合に指定します。既定値は RESTRICT です。

概要

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

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

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

特権

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

既定では、存在しないビューを削除しようとすると、DROP VIEW は SQLCODE -30 エラーを発行します。現在の設定を確認するには、$SYSTEM.SQL.CurrentSettings()Opens in a new tab を呼び出します。これにより、[存在しないテーブルまたはビューの DDL DROP を許可する] 設定が表示されます。既定値は 0 (“いいえ”) です。この設定を推奨します。1 (“はい”) に設定した場合、存在しないビューおよびテーブルに対して DROP VIEW または DROP TABLE を発行すると、処理は実行されず、エラー・メッセージも発行されません。

管理ポータル、[システム管理][構成][SQL とオブジェクトの設定][SQL] から [冗長な DDL ステートメントを無視] チェック・ボックスにチェックを付けることにより、このオプション (および他の同様の作成、変更、および削除のオプション) をシステム全体で設定できます。

述語 IF EXISTS の動作は、管理ポータルでの設定および DDL 文を制御する構成パラメータ・ファイル (CPF) での設定Opens in a new tabよりも優先されます。これらの設定によって SQLCODE 0 が返され、通知なしでエラーが抑制されます。IF EXISTS を指定していると、このコマンドからはメッセージと共に SQLCODE 1 が返されます。

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

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

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

関連付けられたクエリ

ビューを削除すると、自動的にすべての関連クエリ・キャッシュが削除され、%SYS.PTools.StatsSQLOpens 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