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;
before update
on tasks
for each row --少了这句
begin
update structures
set task_id=:new.task_id
where task_id=:old.task_id;
end;
但是好像有的触发器里面也可以没有“for each row”,这句一定要吗?
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是表名。
没有for each row的是语句级触发器,不能使用:new 和 :old,因为一条语句可能涉及多行。
还想问一个问题:oracle的约束条件中的“能否延迟”,这一项有何作用?约束条件中的后面几项又如何用?