访问触发器体内的触发器表
如何访问触发器体内有触发器的表格?访问触发器体内的触发器表
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”。有没有办法独立于触发器进行插入操作,然后再运行触发器?
我看不到任何理由使用查询定义触发器的同一个表的函数。它什么都不做,只是发送: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;
/
它会简单地插入从triggertable
field1
价值为anothertable
。
请检查我的编辑版本。问题不在于“我怎样才能将行插入另一个表”。 – Sammy
使函数自主使用编译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;
然后尝试插入,变异表错误不会再在这种情况下。
但是,新插入的行仍然无法访问.. – Sammy
您的where子句是“field1!= param1”,这意味着您在没有新插入的行的情况下获得最大值。为什么你需要访问新插入的行? –
表'triggerTable'是变异的,因为你试图从当前被触发器修改的表中进行选择。 –
那么如何从这张表中选择?是否有解决方法或其他方法来实现我所描述的? – Sammy
为什么你需要这个功能呢?你可以使用':new.filed1' –