在插入"后,我遇到问题"触发器,它不会将值传递给我在触发器内调用的存储过程。 它适用于更新,我还应该提到我正在调用我正在调用的过程中的表。 它类似于:
create or replace trigger test_trg
after insert or update on table1
for each row
begin
test_procedure(:new.value1);
end;
该过程在table1中查找,并在table2中插入有关应根据当前插入/更新的行添加到table1中的内容的提示。
提前致谢!!
答案 0 :(得分:0)
触发器事务取决于其语句事务。因此,您无法读取未提交的记录。因此,您应该将“test_procedure”代码传输到触发器中并使用:新记录值将数据插入到table2中。 您的代码应如下所示:
create or replace trigger test_trg
after insert or update on table1
for each row
begin
if inserting then
insert into table2(ID, F1, F2, ...)
values (NEW_ID_VALUE, :NEW.F1_VALUE, :NEW.F2_VALUE, ...);
elsif updating then
update table2
set F1 = :NEW.F1_VALUE
, F2 = :NEW.F2_VALUE
where TABLE1_ID_FK = :NEW.ID;
end if;
end;
答案 1 :(得分:0)
我找到了! 问题不在于触发器,而是在程序中。我正在根据我发送的记录ID(新行的记录ID)执行“脏读”。 即使我的触发器是“插入后”,看起来我的行无法找到我的行,而且我的所有操作都基于它。
通过向过程添加更多参数并直接从触发器传递新值来修复它。