使用2个表触发

时间:2014-08-15 16:23:02

标签: oracle triggers

是否可以在触发器中引用第二个表?

create or replace trigger table1
before update of status_code on table1
for each row
declare z_user_id table2.user_id;
begin
    if :new.status_code in (30,40) then
    :new.z_open_01 := nvl(:OLD.z_user_id, nvl(:NEW.z_user_id, :old.z_open_01));
    end if;
end;
/

1 个答案:

答案 0 :(得分:0)

关于你的问题:是的。

:old和:new构造仅适用于导致触发器触发的表。 您编写的方式是触发Table1,但您的描述听起来像是在Table2中的某些内容发生更改时从表1中获取值。 但是您没有用您抓取的用户ID说出您想要做的事情。 如果在Table2上创建触发器,请从Table1中读取值,并将值保存在触发触发器的行的列中。其他情况变得更加复杂。

所以,基于评论的内容如下:
create or replace trigger table2 after update of status_code on table2 for each row when (:new.status_code in (30,40)) declare t1_user Table1.user_id%type; begin Select user_id into t1_user from Table1 where <condition> :new.z_open_01 := t1_user; end if; end; / 设置任何条件从Table1中选择所需的用户。