ORACLE - 触发器未将值传递给过程

时间:2017-12-09 03:18:22

标签: oracle stored-procedures triggers

在插入"后,我遇到问题"触发器,它不会将值传递给我在触发器内调用的存储过程。 它适用于更新,我还应该提到我正在调用我正在调用的过程中的表。 它类似于:

create or replace trigger test_trg
after insert or update on table1
for each row
begin
    test_procedure(:new.value1);
end;

该过程在table1中查找,并在table2中插入有关应根据当前插入/更新的行添加到table1中的内容的提示。

提前致谢!!

2 个答案:

答案 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)执行“脏读”。 即使我的触发器是“插入后”,看起来我的行无法找到我的行,而且我的所有操作都基于它。

通过向过程添加更多参数并直接从触发器传递新值来修复它。