トリガーを使用する理由
トリガーを使用して、データベース管理システムをカスタマイズできます。
たとえば、トリガーを使用すると、次の操作を行うことができます。
-
仮想列の値の自動的な生成
-
イベントのログへの記録
-
表へのアクセスに関する統計情報の収集
-
ビューに対してDML文が発行された場合の表データの変更
-
親表と子表が分散データベースの異なるノード上にあるときの参照整合性の実行
-
サブスクライブ元のアプリケーションへのデータベース・イベント、ユーザー・イベントおよびSQL文に関する情報のパブリッシュ
-
通常の業務時間後における表に対するDML操作の防止
-
無効なトランザクションの防止
-
制約では定義できない複雑なビジネス・ルールまたは参照整合性規則の実行(「トリガーと制約の違い」を参照)
注意:
トリガーは、プログラムで構築されるものであり、無効になりやすいため、信頼性の高いセキュリティ・メカニズムではありません。高いセキュリティを確保するには、Oracle Database Vaultを使用してください(『Oracle Database Vault管理者ガイド』を参照)。
トリガーと制約の違い
トリガーと制約のどちらを使用してもデータ入力を制約できますが、両者は大きく異なります。
トリガーは、常に新規データのみに適用されます。たとえば、トリガーによって、DML文がデータベースの列にNULL
値を挿入することを防止できますが、列には、トリガーが定義される前またはトリガーが無効な間に挿入されたNULL
値が含まれている可能性があります。
制約は、トリガーのように新しいデータのみに適用するか、新しいデータと既存のデータの両方に適用できます。『Oracle Database SQL言語リファレンス』で説明されているように、制約の動作は制約の状態によって異なります。
制約は、同じルールを実行するトリガーに比べて作成しやすく、エラーが発生する可能性が低くなります。ただしトリガーは、制約では定義できない複雑なビジネス・ルールを実行できます。トリガーは、次の場合にのみデータ入力の制約に使用することをお薦めします。
-
親表と子表が分散データベースの異なるノード上にあるときに参照整合性を実行する場合
-
制約では定義できない複雑なビジネス・ルールまたは参照整合性規則を実行する場合
関連項目:
-
制約を使用してビジネス・ルールを実行したり、表への無効な情報の入力を防止する方法の詳細は、『Oracle Database開発ガイド』を参照してください。
-
トリガーおよび制約を使用して親表と子表の間の参照整合性を保持する方法の詳細は、「参照整合性を保証するトリガー」を参照してください