create trigger tasks_update
before update
on tasks
for each row  --少了这句
begin
update structures
set task_id=:new.task_id
where task_id=:old.task_id;
end;

解决方案 »

  1.   

    谢谢!可以了。
    但是好像有的触发器里面也可以没有“for each row”,这句一定要吗?
      

  2.   

    create sequence S_A_EventID increment by 1 start with 1 maxvalue 999999999;
    CREATE OR REPLACE TRIGGER T_A_EventID
    BEFORE INSERT ON AnnounceEvent
    REFERENCING OLD AS old NEW AS new
    FOR EACH ROW
    BEGIN
      IF :new.EventID IS NULL THEN
        SELECT S_A_EventID.NEXTVAL
        INTO   :new.EventID
        FROM   dual;
      END IF;
    END;
    /
    其中S_A_EventID是SEQUENCE名,T_A_EventID是TRIGGER名。
    AnnounceEvent是表名。
      

  3.   

    有for each row的是行级触发器,只有行级触发器才能用:new 和 :old,
    没有for each row的是语句级触发器,不能使用:new 和 :old,因为一条语句可能涉及多行。
      

  4.   

    感激!
    还想问一个问题:oracle的约束条件中的“能否延迟”,这一项有何作用?约束条件中的后面几项又如何用?
      

  5.   

    我只知道ORACLE的约束是通过主外键和自关联来实现的,你所说的“能否延迟”我不是太明白你的意思?
      

  6.   

    Oracle DBA Studio中的对表直接设定约束条件时有“能否延迟?”这一项呀。