日期:2014-05-16  浏览次数:20470 次

oracle trigger 两个表 同时修改

?

ORACLE产生数据库触发器的语法为:

create [or replace] trigger 触发器名 触发时间 触发事件

on 表名

[for each row]

pl/sql 语句

?

其中:

触发器名:触发器对象的名称。由于触发器是数据库自动执行

的,因此该名称只是一个名称,没有实质的用途。

触发时间:指明触发器何时执行,该值可取:

before---表示在数据库动作之前触发器执行;

after---表示在数据库动作之后出发器执行。

触发事件:指明哪些数据库动作会触发此触发器:

insert:数据库插入会触发此触发器;

update:数据库修改会触发此触发器;

delete:数据库删除会触发此触发器。

表 名:数据库触发器所在的表。

for each row:对表的每一行触发器执行一次。如果没有这一

选项,则只对整个表执行一次。

?

举例:下面的触发器在更新表auths之前触发,目的是不允许在

周末修改表:

create trigger auth_secure

before insert or update or delete //对整表更新前触发

on auths

begin

if(to_char(sysdate,'DY')='SUN'

RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表auths');

end if;

end

================================
自己的一个触发器例子。
说明:有t_price_gathering表和t_person表,其中t_price_gathering表的pg_telphone字段引用自t_person表的phone字段,当t_person表修改了phone字段的时候,需要级联修改pg_telphone字段

create or replace trigger price_gathering
after update on t_person
for each row
when (NEW.phone <> OLD.phone )
begin
update t_price_gathering set t_price_gathering.pg_telphone =:NEW.phone where t_price_gathering.pg_telphone =:OLD.phone and? t_price_gathering.PG_IDENTITY_FLAG = 1;
end trg_upd;