我有两个表,其中包含带有产品ID的引用。表格如下。
表1:ID,Rgrupa 表2:ID,Rgrupa
我想创建触发器,当表1中的Rgrupa更新时,将从表2更新Rgrupa,以获得相同的产品ID。
我试过这个
create or replace trigger test
after update of rgrupa on table1
begin
update table2 t2
set t2.rgrupa = :new.rgrupa
where t2.id = :new.id;
end;
错误信息是: 错误:ORA-04082:表级触发器中不允许新的或旧的引用
答案 0 :(得分:3)
如果我运行你的代码:
SQL> CREATE OR REPLACE TRIGGER test
2 AFTER UPDATE OF rgrupa
3 ON table1
4 BEGIN
5 UPDATE table2 t2
6 SET t2.rgrupa = :new.rgrupa
7 WHERE t2.id = :new.id;
8 END;
9 /
CREATE OR REPLACE TRIGGER test
*
ERROR at line 1:
ORA-04082: NEW or OLD references not allowed in table level triggers
Oracle明确表示您的代码存在问题。
如果要使用:new
,则需要行级触发器:
SQL> CREATE OR REPLACE TRIGGER test
2 AFTER UPDATE OF rgrupa
3 ON table1
4 FOR EACH ROW
5 BEGIN
6 UPDATE table2 t2
7 SET t2.rgrupa = :new.rgrupa
8 WHERE t2.id = :new.id;
9 END;
10 /
Trigger created.
答案 1 :(得分:1)
我使用下面的结构来创建触发器
create table table1 (id int, rgrupa varchar2(100));
create table table2 (id int, rgrupa varchar2(100));
insert into table1 (id,rgrupa) values (1,'A');
insert into table1 (id,rgrupa) values (2,'B');
insert into table1 (id,rgrupa) values (3,'C');
insert into table2 (id,rgrupa) values (1,'A');
insert into table2 (id,rgrupa) values (2,'B');
commit;
select * from table1;
select * from table2;
create or replace trigger sandeeptest after update of rgrupa on table1 for each row
begin
update table2 set rgrupa=:new.rgrupa where id=:new.id;
end;
update table1 set rgrupa='Aa' where rgrupa='A';
update table1 set rgrupa='Cc' where rgrupa='C';