在Oracle 11g上创建触发器

时间:2015-04-27 03:07:22

标签: oracle triggers

每当触发器表有updates命令或insert into时,我需要创建after insert trigger另一个表的触发器。

我需要将正在插入表中的id拉出来更新另一个表,我该怎么做呢?

如果这令人困惑,另一次尝试我的问题:

Table 1有一个after insert trigger。所述trigger根据插入table 2的其中一个id值更新table 1。如何从table 1中的trigger提取所述ID值?

2 个答案:

答案 0 :(得分:2)

您可以在触发器中使用:new来引用要插入的值,例如

create or replace trigger <trigger_name>
after insert on <table_name>
for each row
declare
    l_id number;
begin
    select :new.id into l_id from dual;
    -- now l_id contains the id of the inserted row, do what you want with it
end;

不要以字面意思为例;你不必首先选择:new.id到一个变量中,你可以直接在SQL里面使用它来触发它。我这里做的只是为了说明。

查看Oracle文档:Coding Triggers

但是,您可能还想看看一些争论,如果您真的需要将逻辑放入触发器中,为什么要三思而后行:The Trouble with Triggers

答案 1 :(得分:0)

 CREATE OR REPLACE TRIGGER testempdel
    AFTER insert ON testemp
     FOR EACH ROW
    BEGIN
        update  testdelvalues set salary=:New.sal;
    END;
    /

Trigger created.

最初薪水为空

SQL> select * from testdelvalues;

     EMPNO EMPNAME        SALARY
---------- ---------- ----------
      7369 SMITH

在其他表中插入值后更新

SQL> insert into testemp (empno,ename,sal) values (1231,'TESTUSER',1000);

1 row created.

SQL> select * from testdelvalues;

     EMPNO EMPNAME        SALARY
---------- ---------- ----------
      7369 SMITH            1000