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

トリガを削除します。

Synopsis

DROP TRIGGER [IF EXISTS] name [ FROM table ]

引数

引数 説明
IF EXISTS オプション — 存在しないトリガに対してコマンドが実行される場合にエラーを抑制します。
name 削除するトリガの名前。トリガ名は修飾、未修飾のどちらでもかまいません。修飾する場合、そのスキーマ名はテーブルのスキーマ名と同じである必要があります。
FROM table オプション — トリガを削除するテーブル。 FROM 節を指定すると、そのテーブルでのみ指定のトリガが検索されます。FROM 節を指定しない場合は、name で指定したスキーマ全体で指定のトリガが検索されます。

概要

DROP TRIGGER コマンドはトリガを削除します。既存のトリガを変更する場合は、DROP TRIGGER を呼び出してトリガの古いバージョンを削除してから、CREATE TRIGGER を呼び出す必要があります。

Note:

DROP TABLE を実行すると、そのテーブルに関連付けられているトリガはすべて削除されます。

特権とロック

DROP TRIGGER コマンドは特権を必要とする操作です。DROP TRIGGER を実行するには、ユーザは %DROP_TRIGGER 管理特権を持っている必要があります。持っていない場合、SQLCODE –99 エラーが発生し、%msg が "ユーザ 'name' は %DROP_TRIGGER 特権を持っていません" に設定されます。

ユーザは、指定されたテーブルに対する %ALTER 特権を持っている必要があります。ユーザがテーブルの所有者 (作成者) である場合、ユーザにはそのテーブルに対する %ALTER 特権が自動的に付与されます。そうでない場合は、ユーザにテーブルに対する %ALTER 特権を付与する必要があります。持っていない場合、SQLCODE –99 エラーが発生し、%msg が "ユーザ 'name' は 'Schema.TableName' のテーブル定義を変更するために必要な %ALTER 特権を持っていません。" に設定されます。

適切な付与特権を持っている場合は、GRANT コマンドを使用して %DROP_TRIGGER 特権および %ALTER 特権を割り当てることができます。

埋め込み 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" を参照してください。

  • DROP TRIGGER は、テーブル・クラスの定義に [DdlAllowed] が含まれている場合を除き、永続クラスから投影されたテーブルでは使用できません。使用すると、操作は SQLCODE -300 エラーで失敗し、%msg が “DDL がクラス schema.tablename に対して有効になっていません” に設定されます。

  • DROP TRIGGER は、導入済みの永続クラスから投影されたテーブルでは使用できません。この操作は SQLCODE -400 エラーで失敗し、%msg が “導入済みのクラス classname を変更する DDL を実行できません” に設定されます。

DROP TRIGGER 文は、table に対してテーブル・レベルのロックを取得します。これにより、他のプロセスはこのテーブルのデータを変更できなくなります。このロックは、DROP TRIGGER 操作が終了すると自動的に解除されます。

FROM 節

トリガとそのテーブルは同じスキーマに存在している必要があります。トリガ名が未修飾の場合、トリガのスキーマ名は既定で、FROM 節で指定したように、テーブルのスキーマと同じスキーマになります。トリガ名が未修飾で、FROM 節がないか、テーブル名も未修飾の場合、トリガのスキーマは既定で既定のスキーマ名になります。スキーマ検索パスは使用されません。両方の名前を修飾する場合は、トリガのスキーマ名がテーブルのスキーマ名と同じである必要があります。スキーマ名が一致しないと SQLCODE -366 エラーになります。これはトリガ名とテーブル名の両方が修飾されていて、異なるスキーマ名を指定しているときにのみ起こります。

InterSystems SQL では、トリガ名はスキーマ内の特定のテーブルに関して一意である必要があります。したがって、1 つのスキーマ内に同じ名前のトリガが複数存在する場合があります。オプションの FROM 節は、削除するトリガを決めるために以下のように使用されます。

  • FROM 節が指定されておらず、指定された名前と一致する一意のトリガがスキーマ内で見つかった場合、InterSystems IRIS はそのトリガを削除します。

  • FROM 節が指定され、指定された名前と FROM 節のテーブル名の両方に一致する一意のトリガがスキーマ内で見つかった場合、InterSystems IRIS はそのトリガを削除します。

  • FROM 節が指定されておらず、指定された名前と一致する複数のトリガが見つかった場合、InterSystems IRIS は SQLCODE -365 エラーを発行します。

  • FROM 節で指定されたテーブルに関して指定された名前のトリガが見つからないか、FROM 節が指定されていない場合にスキーマ内でどのテーブルに関しても指定された名前のトリガが見つからない場合、InterSystems IRIS は SQLCODE -363 エラーを発行します。

以下の例は、システム全体の既定のスキーマ内で任意のテーブルに関連する Trigger_1 というトリガを削除します (初期の既定のスキーマは SQLUser です)。

DROP TRIGGER Trigger_1

以下の例は、A スキーマ内で任意のテーブルに関連する Trigger_2 というトリガを削除します。

DROP TRIGGER A.Trigger_2

以下の例は、システム全体の既定のスキーマ内で Patient テーブルに関連する Trigger_3 というトリガを削除します。Trigger_3 という名前のトリガが見つかっても、Patient と関連していなければ、InterSystems IRIS は SQLCODE -363 エラーを発行します。

DROP TRIGGER Trigger_3 FROM Patient

以下の例はすべて、Test スキーマ内で Patient テーブルに関連する Trigger_4 というトリガを削除します。

DROP TRIGGER Test.Trigger_4 FROM Patient
DROP TRIGGER Trigger_4 FROM Test.Patient
DROP TRIGGER Test.Trigger_4 FROM Test.Patient

関連項目

FeedbackOpens in a new tab