如何访问触发器主体内部有触发器的表?
create or replace trigger insert_try after insert on triggerTable for each row
begin
insert into anotherTable (triggerFunction(:new.field1), 155,155);
end;
create or replace function triggerFunction(param1 in number) return number as
abc number;
begin
select max(field1) into abc from triggerTable where field1!= param1;
return abc ;
end triggerFunction;
这会导致“SQLSyntaxErrorException:ORA-04091”。有没有办法独立于触发器进行插入操作并在之后运行触发器?
答案 0 :(得分:0)
我没有看到任何理由使用查询定义触发器的同一个表的函数。除了将:new.field1
作为参数发送并获得相同的值之外,它什么都不做。
由于您已使用 FOR EACH ROW ,因此您可以将:old
和:new
作为旧值和新值进行访问。
CREATE OR REPLACE TRIGGER insert_try
AFTER INSERT ON triggerTable
FOR EACH ROW
BEGIN
INSERT INTO anotherTable
(:new.field1, 155,155
);
END;
/
它只会将field1
triggertable
的值插入anothertable
。
答案 1 :(得分:0)
使用pragma autonomous_transaction
使函数自治 create or replace function triggerFunction(param1 in number) return number as
abc NUMBER;
pragma autonomous_transaction ;
begin
select max(field1) into abc from triggerTable where field1!= param1;
return abc ;
end triggerFunction;
然后尝试插入,在这种情况下不会出现变异表错误。