1

次のようなトリガーがあります。

create or replace
TRIGGER cluster_check
before insert on my_table
FOR EACH ROW

when (passive_server = new.server)

begin
ROLLBACK;
UPDATE my_table
set (server,passive_server) = (passive_server,server) where passive_server = new.server;
end;

Error: ORA-04076: invalid NEW or OLD specification コンパイル時にエラーが発生します。

基本的に私がやろうとしているのは、挿入をチェックして、受信サーバーが別のレコードのパッシブサーバーと一致するかどうかを確認し、一致する場合は挿入をキャンセルして、既存のレコードのパッシブサーバーとアクティブサーバーを交換することです。

私は何を間違っていますか?

4

1 に答える 1

4

テーブルのトリガーは、このように操作を変更できません。

の上にビューを定義し、ビューに対して を実行してから、操作を に変更するmy_tableトリガーを設定できます。ただし、すべての DML は、テーブルではなくビューに対して実行する必要があります。テーブルの名前を変更してから、その移行を容易にする名前のビューを作成することができます。INSERTinstead of insertINSERTUPDATEmy_table

ただし、その道をたどる前に、そもそもトリガーが必要だと確信していますか? あなたのアプリケーションは、何をすべきかを決定するストアド プロシージャを呼び出すようなことを実行できなかったり、 のMERGE代わりに実行できなかったと確信していますINSERTか?

于 2012-06-14T15:02:15.683 に答える