トリガーを使用する理由

トリガーを使用して、データベース管理システムをカスタマイズできます。

たとえば、トリガーを使用すると、次の操作を行うことができます。

  • 仮想列の値の自動的な生成

  • イベントのログへの記録

  • 表へのアクセスに関する統計情報の収集

  • ビューに対してDML文が発行された場合の表データの変更

  • 親表と子表が分散データベースの異なるノード上にあるときの参照整合性の実行

  • サブスクライブ元のアプリケーションへのデータベース・イベント、ユーザー・イベントおよびSQL文に関する情報のパブリッシュ

  • 通常の業務時間後における表に対するDML操作の防止

  • 無効なトランザクションの防止

  • 制約では定義できない複雑なビジネス・ルールまたは参照整合性規則の実行(「トリガーと制約の違い」を参照)

注意:

トリガーは、プログラムで構築されるものであり、無効になりやすいため、信頼性の高いセキュリティ・メカニズムではありません。高いセキュリティを確保するには、Oracle Database Vaultを使用してください(『Oracle Database Vault管理者ガイド』を参照)。

トリガーと制約の違い

トリガーと制約のどちらを使用してもデータ入力を制約できますが、両者は大きく異なります。

トリガーは、常に新規データのみに適用されます。たとえば、トリガーによって、DML文がデータベースの列にNULL値を挿入することを防止できますが、列には、トリガーが定義される前またはトリガーが無効な間に挿入されたNULL値が含まれている可能性があります。

制約は、トリガーのように新しいデータのみに適用するか、新しいデータと既存のデータの両方に適用できます。『Oracle Database SQL言語リファレンス』で説明されているように、制約の動作は制約の状態によって異なります。

制約は、同じルールを実行するトリガーに比べて作成しやすく、エラーが発生する可能性が低くなります。ただしトリガーは、制約では定義できない複雑なビジネス・ルールを実行できます。トリガーは、次の場合にのみデータ入力の制約に使用することをお薦めします。

  • 親表と子表が分散データベースの異なるノード上にあるときに参照整合性を実行する場合

  • 制約では定義できない複雑なビジネス・ルールまたは参照整合性規則を実行する場合

関連項目: