DB2Express-Cを使用しています。テーブルにONINSERTトリガーがあり、新しい行を別のテーブルに挿入します。トリガーが定義されているテーブルに新しい行を挿入しない方法はありますか?
どんな助けでもありがたいです、ありがとう
create トリガーと INSTEAD OF オプションを見てみましょう。
関連するトリガーされたアクションがサブジェクト ビューに対するアクションを置き換えることを指定します。特定のサブジェクト ビューに対する操作の種類ごとに、1 つの INSTEAD OF トリガーのみが許可されます (SQLSTATE 428FP)。
通常、このようなことは、特殊レジスター (例: CURRENT USER
) が特定の値を持っているかどうかを評価することによって行うことができます。
create trigger trigger1
after insert on schema.table
referencing new as n
for each row
when (CURRENT USER <> 'NAMSARAY')
insert into schema.tablecopy values (n.c1, n.c2, ...);
DB2 9.7 以降を使用している場合は、変数を定義し、その変数をトリガーがアクションを実行するかどうかの制御として使用することも検討できます。
create variable schema.var1 smallint default 0;
次に、トリガーでこの変数の値を確認できます。アプリケーションが変数を事前定義された値 (以下の例では -9999) に明示的に設定していない限り、トリガーが発生します。
create trigger trigger2
after insert on schema.table
referencing new as n
for each row
when (schema.var1 <> -9999)
insert into schema.tablecopy values (n.c1, n.c2, ...);