概要
DROP PROCEDURE コマンドは、現在のネームスペース内のプロシージャを削除します。プロシージャを削除すると、InterSystems IRIS は、そのプロシージャ権限が与えられている全ユーザおよびロールでそれを無効にし、データベースから削除します。
プロシージャの削除には、GRANT コマンドで指定された %DROP_PROCEDURE 管理者特権が必要です。定義された所有者を持つ既存のクラスのプロシージャを削除しようとする場合、クラスの所有者としてログインする必要があります。この特権がないと、SQLCODE -99 エラー (特権違反) が生成されます。
プロシージャは、そのプロシージャ定義を含むクラス定義が導入済みのクラスの場合、削除することはできません。この操作は SQLCODE -400 エラーで失敗し、%msg が “導入済みのクラス classname を変更する DDL を実行できません” に設定されます。
procname では、大文字と小文字は区別されません。procname は、パラメータの括弧なしで指定する必要があります。パラメータの括弧を指定した場合は、SQLCODE -25 エラーが発生します。
procname と FROM className の次のような組み合わせがサポートされています。FROM 節では、SQL 名ではなく、クラス・パッケージ名とプロシージャ名を指定することに注意してください。これらの例では、システム全体の既定のスキーマ名は、User クラス・パッケージに対応する SQLUser です。
-
DROP PROCEDURE BonusCalc FROM procBonusCalc : プロシージャ SQLUser.BonusCalc() を削除します。
-
DROP PROCEDURE BonusCalc FROM User.procBonusCalc : プロシージャ SQLUser.BonusCalc() を削除します。
-
DROP PROCEDURE Test.BonusCalc FROM procBonusCalc : プロシージャ SQLUser.BonusCalc() を削除します。
-
DROP PROCEDURE BonusCalc FROM Employees.procBonusCalc : プロシージャ Employees.BonusCalc() を削除します。
-
DROP PROCEDURE Test.BonusCalc FROM Employees.procBonusCalc : プロシージャ Employees.BonusCalc() を削除します。
指定されたプロシージャが存在しない場合、DROP PROCEDURE は SQLCODE -362 エラーを発行します。指定されたクラスが存在しない場合、DROP PROCEDURE は SQLCODE -360 エラーを発行します。指定されたプロシージャが複数のプロシージャを参照する可能性がある場合、DROP PROCEDURE は SQLCODE -361 エラーを生成します。このあいまいさを解消するには、className を指定する必要があります。
指定の procname が現在のネームスペースに存在するかどうかを確認するには、$SYSTEM.SQL.Schema.ProcedureExists()Opens in a new tab メソッドを使用します。このメソッドは、PROCEDURE キーワードを使用して定義されたプロシージャとメソッドの両方を認識します。PROCEDURE キーワードを使用して定義されたメソッドは、DROP PROCEDURE を使用して削除できます。
ObjectScript クラス・クエリ・プロシージャであるプロシージャに対して DROP PROCEDURE を実行した場合は、そのプロシージャに関連するメソッド (myprocExecute()、myprocGetInfo()、myprocFetch()、myprocFetchRows()、myprocClose() など) も削除されます。
また、クラス定義からストアド・プロシージャを削除してクラスをリコンパイルするか、クラス全体を削除することによって、プロシージャを削除することもできます。