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 }
関連項目
-
"InterSystems SQL の使用法" の “ビュー” の章
-
"システム管理ガイド" にリストされた SQL およびオブジェクトの設定ページ
-
"InterSystems IRIS エラー・リファレンス" にリストされた SQLCODE エラー・メッセージ