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 METHOD (SQL)

メソッドを削除します。

Synopsis

DROP METHOD [IF EXISTS] name [ FROM className ]

引数

引数 説明
IF EXISTS オプション — 存在しないメソッドに対してコマンドが実行される場合にエラーを抑制します。
name 削除するメソッドの名前。識別子の名前です。メソッドのパラメータの括弧は指定しないでください。name は修飾 (schema.name)、未修飾 (name) のどちらでもかまいません。FROM className 節が指定されていない限り、メソッド名が未修飾の場合は既定のスキーマ名が使用されます。
FROM className オプション — 指定があれば、FROM className 節は与えられたクラスからメソッドを削除します。メソッドの SQL 名 (BonusCalc) ではなく、className (methBonusCalc) を指定する必要があります。この節が指定されていない場合、InterSystems IRIS はそのスキーマのすべてのクラスで該当するメソッドを検索し、削除します。しかし、この名前でのメソッドが見つからない場合、または複数の同名のメソッドが見つかった場合、エラー・コードが返されます。メソッドの削除の結果、クラスが空になる場合、DROP METHOD はそのクラスも削除します。

概要

DROP METHOD コマンドは、メソッドを削除します。メソッドを削除すると、InterSystems IRIS は、そのメソッドが許可されているすべてのユーザとロールからそのメソッドを削除して、データベースから削除します。

メソッドを削除するためには、GRANT コマンドで指定される %DROP_METHOD 管理者特権が必要です。定義された所有者を持つクラスのメソッドを削除しようとする場合、クラスの所有者としてログインする必要があります。この特権がないと、SQLCODE -99 エラー (特権違反) が生成されます。

メソッドは、そのメソッド定義を含むクラス定義が導入済みのクラスの場合、削除することはできません。この操作は SQLCODE -400 エラーで失敗し、%msg が “導入済みのクラス classname を変更する DDL を実行できません” に設定されます。

name と FROM className の次のような組み合わせがサポートされています。FROM 節では、SQL 名ではなく、クラス・パッケージ名とメソッド名を指定することに注意してください。これらの例では、システム全体の既定のスキーマ名は、User クラス・パッケージに対応する SQLUser です。

  • DROP METHOD BonusCalc FROM methBonusCalc : メソッド SQLUser.BonusCalc() を削除します。

  • DROP METHOD BonusCalc FROM User.methBonusCalc : メソッド SQLUser.BonusCalc() を削除します。

  • DROP METHOD Test.BonusCalc FROM methBonusCalc : メソッド SQLUser.BonusCalc() を削除します。

  • DROP METHOD BonusCalc FROM Employees.methBonusCalc : メソッド Employees.BonusCalc() を削除します。

  • DROP METHOD Test.BonusCalc FROM Employees.methBonusCalc : メソッド Employees.BonusCalc() を削除します。

指定されたメソッドが存在しない場合、DROP METHOD は SQLCODE -362 エラーを発行します。指定された className が存在しない場合、DROP METHOD は SQLCODE -360 エラーを発行します。指定されたメソッドが複数のメソッドを参照する可能性がある場合、DROP METHOD は SQLCODE -361 エラーを生成します。このあいまいさを解消するには、className を指定する必要があります。

メソッドが PROCEDURE 特性キーワードを使用して定義されている場合は、$SYSTEM.SQL.Schema.ProcedureExists()Opens in a new tab メソッドを呼び出すことで、そのメソッドが現在のネームスペース内に存在しているかどうかを確認できます。PROCEDURE キーワードを使用して定義されたメソッドは、DROP METHOD または DROP PROCEDURE によって削除できます。

また、クラス定義からメソッドを削除してクラスをリコンパイルするか、クラス全体を削除することによって、メソッドを削除することもできます。

以下の埋め込み SQL の例は、クラス User.Employee からの mymeth の削除を試行します (クラス User.Employee の作成例は、"CREATE TABLE" を参照してください)。

   &sql(DROP METHOD mymeth FROM User.Employee)
  IF SQLCODE=0 {
    WRITE !,"Method deleted" }
  ELSEIF SQLCODE=-360 {
    WRITE !,"Nonexistent class: ",%msg }
  ELSEIF SQLCODE=-362 {
    WRITE !,"Nonexistent method: ",%msg }
  ELSE {WRITE !,"Unexpected Error code: ",SQLCODE}

関連項目

FeedbackOpens in a new tab