DROP PROCEDURE
Synopsis
DROP PROCEDURE procname [ FROM className ] DROP PROC procname [ FROM className ]
引数
procname | 削除するプロシージャの名前。このプロシージャ名には、修飾なし (MyProc) と修飾付き (User.MyProc) のどちらでも指定できます。プロシージャのパラメータの括弧は指定しないでください。詳細は、"InterSystems SQL の使用法" の "識別子" の章を参照してください。 |
FROM className | オプション — 指定があれば、FROM className 節は与えられたクラスからプロシージャを削除します。この節が指定されていない場合、Caché はそのスキーマのすべてのクラスで該当するプロシージャを検索し、削除します。しかし、この名前でのプロシージャが見つからない場合、または複数の同名のプロシージャが見つかった場合、エラー・コードが返されます。プロシージャの削除の結果、クラスが空になる場合、DROP PROCEDURE はそのクラスも削除します。 |
概要
DROP PROCEDURE コマンドは、現在のネームスペース内のプロシージャを削除します。プロシージャを削除すると、Caché は、そのプロシージャ権限が与えられている全ユーザおよびロールでそれを無効にし、データベースから削除します。
プロシージャの削除には、GRANT コマンドで指定された %DROP_PROCEDURE 管理者特権が必要です。定義された所有者を持つ既存のクラスのプロシージャを削除しようとする場合、クラスの所有者としてログインする必要があります。この特権がないと、SQLCODE -99 エラー (特権違反) が生成されます。
procname では、大文字と小文字は区別されません。procname は、パラメータの括弧なしで指定する必要があります。パラメータの括弧を指定した場合は、SQLCODE -25 エラーが発生します。
指定されたプロシージャが存在しない場合、DROP PROCEDURE は SQLCODE -362 エラーを発行します。指定されたクラスが存在しない場合、DROP PROCEDURE は SQLCODE -360 エラーを発行します。指定されたプロシージャが複数のプロシージャを参照する可能性がある場合、DROP PROCEDURE は SQLCODE -361 エラーを生成します。このあいまいさを解消するには、className を指定する必要があります。
指定の procname が現在のネームスペースに存在するかどうかを確認するには、$SYSTEM.SQL.ProcedureExists()Opens in a new tab メソッドを使用します。このメソッドは、PROCEDURE キーワードを使用して定義されたプロシージャとメソッドの両方を認識します。PROCEDURE キーワードを使用して定義されたメソッドは、DROP PROCEDURE を使用して削除できます。
ObjectScript クラス・クエリ・プロシージャであるプロシージャに対して DROP PROCEDURE を実行した場合は、そのプロシージャに関連するメソッド (myprocExecute()、myprocGetInfo()、myprocFetch()、myprocFetchRows()、myprocClose() など) も削除されます。
例
以下の埋め込み SQL の例は、クラス User.Employee からの myprocSP の削除を試行します (クラス User.Employee の作成例は、"CREATE TABLE" を参照してください)。
&sql(DROP PROCEDURE myprocSP FROM User.Employee)
IF SQLCODE=0 {
WRITE !,"Procedure deleted" }
ELSEIF SQLCODE=-360 {
WRITE !,"Nonexistent class: ",%msg }
ELSEIF SQLCODE=-362 {
WRITE !,"Nonexistent procedure: ",%msg }
ELSE {WRITE !,"Unexpected Error code: ",SQLCODE}
関連項目
-
"Caché エラー・リファレンス" にリストされた SQLCODE エラー・メッセージ