oracle建个触发器,Oracle历程(关于触发器的创建及注意事项)

定义:

触发器(Trigger)是存储在数据库中的程序,在某一特定事件发生时执行.如相关的表,视图或者数据库动作执行insert,update或delete语句时执行.

作用:

用来增强数据库的安全性,阻止非法事务,加强商务规则,提供审核甚至维护复制表等功能.

示例:

使用触发器提供一个记录pets表发生的所有动作的审计跟踪.所作的动作都记录到log表中.

SQL> descr log;

名称                                     是否为空类型? 类型

----------------------------------------- -------- ----------------------------

LOG_ID                                    NOT NULL NUMBER

LOG_TABLE                              NOT NULL VARCHAR2(20)

LOG_DML                                                 VARCHAR2(20)

LOG_KEY_ID                                             NUMBER(38)

LOG_DATE                                               DATE

LOG_USERNAME                                       VARCHAR2(20)

创建一个序列:

SQL> create sequence LOG_ID_seq;

序列已创建

创建一个触发器,把所有insert,update和delete事件写入log表中:

create or replace trigger trg_pets_upper_pet_kind

before

DELETE or INSERT or UPDATE

on scott.PETS

for each row

begin

if INSERTING then

insert into scott.LOG(LOG_ID,LOG_TABLE,LOG_DML,LOG_KEY_ID,LOG_USERNAME,LOG_DATE)

values(LOG_ID_seq.nextval,‘log‘,‘INSERT‘,:new.pet_id,user,sysdate);

elsif DELETING then

insert into scott.LOG(LOG_ID,LOG_TABLE,LOG_DML,LOG_KEY_ID,LOG_USERNAME,LOG_DATE)

values(LOG_ID_seq.nextval,‘log‘,‘DELETE‘,:old.pet_id,user,sysdate);

else

insert into scott.LOG(LOG_ID,LOG_TABLE,LOG_DML,LOG_KEY_ID,LOG_USERNAME,LOG_DATE)

values(LOG_ID_seq.nextval,‘log‘,‘UPDATE‘,:old.pet_id,user,sysdate);

end if;

exception

when others then

raise_application_error(-20000,‘ERROR trg_pets_upper_pet_kind: ‘ || SQLERRM);

end trg_pets_upper_pet_kind;

/

触发器已创建

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值