以下に示す比較チャートを使って、TriggerとProcedureの違いについてもう少し説明しましょう。
比較表
比較基準 | トリガー | 手続き |
---|---|---|
基本 | 指定したイベントが発生すると自動的に実行されます。 | 必要なときにいつでも実行できます。 |
呼び出し | プロシージャ内でトリガを呼び出すことはできません。 | しかし、トリガー内でプロシージャを呼び出すことはできます。 |
パラメータ | パラメータをトリガに渡すことはできません。 | 手続きにパラメータを渡すことができます。 |
戻る | 実行時にトリガが値を返すことはありません。 | プロシージャは実行時に値を返すことがあります。 |
トリガーの定義
トリガーは、指定されたイベントの発生時に自動的に実行されるプロシージャのようなものです。 プロシージャと同様に、トリガーは明示的に呼び出す必要はありません。 指定されたイベントの発生に応答して何らかのタスクを実行するためのトリガーが作成されます。
トリガーは、 DDL文(DELETE、INSERT、またはUPDATE)、またはDML文(DELETE、INSERT、またはUPDATE)、あるいはいくつかのデータベース操作(SERVERERROR、LOGON、LOGOFF、STARTUP、またはSHUTDOWN)に応答して起動できます。
以下に説明するように、トリガーは3つのコンポーネントから構成されます。
- イベント :イベントは、トリガーの実行を引き起こすことになる何らかの事件の発生です。 トリガーは、イベントが発生する前に実行するように命令することも、イベントの実行後に実行されるように命令することもできます。
- 条件 :それはトリガーのオプションの部分です。 指定されていない場合、指定されたイベントが発生したときにトリガーが実行されます。 条件が指定されている場合は、ルールをチェックしてトリガーを実行する必要があるかどうかを判断します。
- 処置 :処置は、トリガーの実行時に実行される一連のSQL文です。
イベント作成の一般的な形式については、以下で説明します。
条件アクションの前後にTRIGGERを作成します。
ここで、条件はオプションです。
手順の定義
この手順はプログラム単位と見なすことができ、何らかのタスクを実行するために作成され、データベースに保管されます。 必要なときはいつでもSQLステートメントによって呼び出されます。 プロシージャは、開発者によって定義されたユーザー定義関数のようなものです。 プロシージャーはCALLまたはEXECUTEを使用して呼び出すことができます。
この手順は、次のような状況で役立ちます。
- プロシージャが他のいくつかのアプリケーションによって必要とされる場合、それらは任意のアプリケーションによって呼び出されることができるようにサーバに格納されることができます。 それは、あるデータベースから別のデータベースへの手順の重複の労力を減らし、そしてまたソフトウェアのモジュール性を改善するであろう。
- プロシージャがサーバー上で実行されているため、データ転送が減り、通信コストも減ります。
- この手順を使用して、トリガーの力を超えた複雑な制約をチェックすることができます。
手続きを作成する一般的な形式について説明しましょう。
CREATE PROCEDURE()の戻り値。
ここでは、パラメータとローカル宣言はオプションです。 彼らは彼らが必要とされるときだけ言及されます。 以下の文は、プロシージャの呼び出しについて説明しています。
CALL();
トリガとプロシージャの主な違い
- トリガーとプロシージャの主な違いは、トリガーはイベントが発生したときに自動的に呼び出されるステートメントです。 一方、プロシージャは必要なときはいつでも呼び出されます。
- トリガの中で手続きを定義することができます。 ただし、トリガはイベントの発生時に自動的に呼び出される必要があるため、プロシージャ内でトリガが定義されることはありません。
- プロシージャーにパラメーターを渡すことはできますが、トリガーされないのでトリガーにパラメーターを渡すことはできません。
- プロシージャはパラメータ値またはコードを返すことができますが、トリガは返すことができません。
結論:
トリガーは便利ですが、データの複雑さが増すため、それらに代わるものがあれば回避します。 時にはトリガーも適切な手順で代用されます。