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_tableINSERT对视图执行操作,然后使用instead of insert触发器将INSERT操作更改为UPDATE. 但是,您的所有 DML 都必须与视图而不是表背道而驰。您可能会重命名表,然后创建一个名为的视图以my_table使转换更容易。

然而,在你走这条路之前,你确定你首先需要一个触发器吗?您确定您的应用程序不能执行诸如调用存储过程来确定要做什么或者它不能执行 aMERGE而不是a 的事情INSERT吗?

于 2012-06-14T15:02:15.683 回答