Oracle历程(关于触发器的创建及注意事项)
来源:百度文库 编辑:神马文学网 时间:2024/07/03 08:39:02
定义:
触发器(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;
/
触发器已创建
触发器(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;
/
触发器已创建
Oracle历程(关于触发器的创建及注意事项)
Oracle历程(关于触发器的创建及注意事项)
Oracle触发器语法及实例
怀胎的历程及注意事项!
Oracle触发器
怀胎的历程及注意事项大全
oracle 注意事项
ORACLE客户端连接服务器的注意事项
MYSQL到ORACLE程序迁移的注意事项
SYBASE触发器及应用
SYBASE触发器及应用
SYBASE触发器及应用
锁存器,缓冲器及触发器
创建oracle job
Oracle密码文件的创建、使用和维护
关于编制现金流量表公式及注意事项
培训Java开发使用Oracle数据库的注意事项
详解Oracle创建用户权限全过程
关于Oracle Shared Server及一些参数设置 - air--13910587...
触发器的分类
触发器的分类
触发器的分类--海阔天空
关于买笔记本的注意事项
关于买笔记本的注意事项