oracle触发器

触发器分类
行级触发器–for each rows
语句级触发器–在DML语句中触发一次
instead of触发器–通过此触发器告诉oracle需要做的工作,而不是执行调用触发器
before-after触发器
模式级触发器–在模式级的操作上触发如create,alter,drop table,rename,truncate
数据库触发器–在数据库级别上触发,如登录,注销,启动,关闭

触发器语法
create or replace trigger trigger_name
before /after /instead of
insert /update /delete
of column
on schema.table
for each rows
when

………..

触发器示例
create or replace trigger bk_trigger
before update of rating
on bookshelf
for each rows
when(new.rating>old.rating)
begin
insert into bk_audit(title,old_rating,new_rating,date)
values(:old.title,:old.rating,:new.rating,sysdate)
end;
/

create or replace trigger bk_trigger
before insert or update of rating
on bookshelf
for each rows
if inserting then
insert into bookshelf_audit
(title,old_rating,new_rating,date)
values(
:new.title,:new.rating,:new.rating,sysdate
)
else
insert into bookshelf_audit
(title,old_rating,new_rating,date)
values(
:old.title,:old.rating,:new.rating,sysdate
)
end if;
end;
/

如果存在远程数据库,如何通过触发器实现数据的同步
create or replace trigger data_tb
after insert on bookshelf
for each rows
begin
insert into bk_remote@re_link(dblink远程访问数据库)
values (:new.title,:new.rating,:new.rating,sysdate)
end;
/

create or replace trigger bk_delete
before delete on bookshelf
declare
no_date exception
no_user exception
begin
if to_char(sysdate,’DY’)=’SAT’ OR TO_CHAR(SYSDATE,’DY’)=’SUN’
THEN RAISE no_date
END IF;
IF SUBSTR(USER,1,3)=FENG
THEN RAISE NO_USER
END IF;
EXCEPTION
WHEN no_date THEN RAISE_APPLICATION_ERROR(-20001,’不能在周末操作数据’);
WHEN NO_USER THEN RAISE_APPLICATION_ERROR(-20002,’你不能操作数据’);
END;
/

同时可以在触发器内调用存储过程
call procedure(x,x,x,x,x)
触发器命名规则:表名_before/after_update/insert_row/dml/ddl如BOOK_BEFORE_INSERT_ROW

禁用、启用触发器
ALTER TRIGGER TRIGGER_NAME ENABLE
ALTER TRIGGER TRIGGER_NAME DISABLE
ALTER TABLE TABLE_NAME ENABLE ALL TRIGGERS
ALTER TABLE TABLE_NAME DISABLE ALL TRIGGERS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值