触发器
触发器必须由事件触发.
触发事件分为3类:DML事件、DDL事件、数据库事件。
触发器分为4类:DML触发器、DDL触发器、数据库事件触发器、替代触发器。
注:触发器内不能使用commit,rollback,savepoint 语句,也不能直接或间接调用含有上述语句的存储过程和存储函数。
DML触发器
实例1
先创建一个触发事件记录表event_record
createtable event_record(
record_id number(10)primary key,
dml_name varchar2(15),
table_name varchar2(20),
time date,
user_name varchar2(20)
);
创建一个序列squ
createsequence squ incrementby 1 startwith 1 maxvalue999999 nocycle nocache;
创建并编译触发器dml_log
createor replace triggerdml_log
before --在事件操作前触发
insertor update ordelete --触发事件
onemp--触发器定义在emp表上
foreach row --行级触发器
begin
ifinserting then
insert into event_recordvalues(squ.nextval,'INSERT','EMP',sysdate,user);
elsifupdating then
insert into event_recordvalues(squ.nextval,'UPDATE','EMP',sysdate,user);
else
insert into event_recordvalues(squ.nextval,'delete','EMP',sysdate,user);
end if;
end;
现在你对emp表进行DML操作来验证触发器的作用吧!
实例2
创建一个触发器change_sal,只能修改部门10的雇员工资
createor replace triggerchange_sal
before
updateof sal
onemp
foreach row
begin
if:new.deptno!=10 then --注意new和old,它们放在可执行代码中要加:,放在when条件中不用加:。
raise_application_error(-20001,'您不能修改10号部门外的雇员工资!'); --用函数反馈错误信息
end if;
end;
实例3
创建级联删除触发器cascade_delete,当删除dept表中的部门时,级联删除emp表中雇员信息。
createor replace triggercascade_delete
after --在事件操作后触发
delete
ondept
foreach row
begin
deletefrom emp wheredeptno=:old.deptno;
end;
实例4
创建一个语句级触发器oprate_trigger,限定只能emp表进行修改操作,不能对数据库进行插入和删除。
createor replace triggeroprate_trigger
before
updateor delete orinsert
onemp --注意下面一行没有for eachrow ,所以是语句级触发器
begin
if updating then
insert into event_recordvalues(squ.nextval,'UPDATE','EMP',sysdate,user);
else
raise_application_error(-20008,'您不能对emp表进行插入和删除操作!');
end if;
end;
DDL触发器
createor replace triggernocreate_trigger
before
create
onschema --在当前模式
begin
raise_application_error(-20006,'您在当前模式下,不能创建任何对象!');
end;
数据库事件触发器
先创建一个表user_log
createtable user_log(
user_name varchar2(20),
logon_time date,
logoff_time date
);
创建并编译触发器datebase_logon
createor replace triggerdatebase_logon
after
logon
onschema --当前模式
begin
insert into user_logvalues(user,sysdate,'');
end;
创建并编译触发器datebase_logoff
createor replace triggerdatebase_logoff
before
logoff
onschema --当前模式
begin
insert into user_logvalues(user,'',sysdate);
end;
替代触发器
替代触发器只能创建在视图上,用来替代对视图进行的插入、修改和删除操作。
先创建一个视图
createview emp_ename as selectename from emp;
创建并编译触发器change_ename
createor replace triggerchange_ename
insteadof --注意替代触发器的用法
insert
onemp_ename
declare
v_empnoemp.empno%type;
begin --注意里面的程序,当遇到对视图插入时,转化为对表的插入来达到对视图插入的目的(因为empno为表的主键)
selectmax(empno)+1 into v_empnofrom emp;
insertinto emp(empno,ename) values(v_empno,:new.ename);
end;
其他知识(以触发器change_ename为例)
通过user_triggers视图来查看触发器:select * from user_triggers;
使触发器失效:alter triggerchange_ename disable;
使触发器生效:alter triggerchange_ename enable;
删除触发器:drop triggerchange_ename;
分享到:
相关推荐
2010年学数据库触发器知识和心得供给有需要的朋友(有实例哦。)
这是个pdf格式的文件,主要描述了Oracle 触发器语法及实例基础知识。希望能够给大家带来帮助(*^__^*)
介绍了oracle存储过程的实现、存储过程的调用和触发器语法及实例的基础知识
触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的,接下来本文通过实例详解sqlserver触发器,对sqlserver触发器相关知识感兴趣的朋友一起学习吧
这些综合案例的讲解并非仅仅介绍相关程序构造、搭建过程,而是与前面的基础知识综合贯穿起来,将理论知识与实际操作完美结合,强化读者的学习效果。最后,本书还介绍了使用install shield发布数据库应用程序的方法。...
实例273 使用内连接选择一个表与另一个表中行相关的所有行 9.14 外连接查询 实例274 LEFT OUTER JOIN查询 实例275 RIGHT OUTER JOIN查询 实例276 使用外连接进行多表联合查询 9.15 利用IN进行查询 实例277 ...
《SQL Server 2005应用开发技术与典型实例》采用案例教学的形式,由浅入深、循序渐进地介绍了SQL Server 2005数据库平台的知识体系。全书分为15章:第1章和第2章介绍SQL Server 2005的基本知识及管理和开发工具:第3...
还有那困扰了很多人的单片机编程语言……本篇将生动地通过诸多实例带出单片机的基础知识,在遇到相关模拟电路、数字电路、元器件知识时会有及时的补充说明,带领读者一点点揭开单片机的神秘面纱。 第5章 单片机的...
按照如下顺序传授知识与训练技能:体验数据库的应用→认识Oracle的工作环境、体验Oracle 10g环境中常用工具操作→数据库的创建与管理→数据表的创建与管理→管理视图→SQL编程语言→PL/SQL编程语言→管理PLSQL存储...
本书使用量身定制的案例全面讲解MySQL基础知识以及MySQL5.6新特性,InnoDB全文检索、触发器、存储过程、函数、事务、锁等概念,全部融入该案例。 本书尽量将抽象问题形象化、图形化,复杂问题简单化。即便读者没有...
实例273 使用内连接选择一个表与另一个表中行相关的所有行 9.14 外连接查询 实例274 LEFT OUTER JOIN查询 实例275 RIGHT OUTER JOIN查询 实例276 使用外连接进行多表联合查询 9.15 利用IN进行查询 实例277 ...
按照如下顺序传授知识与训练技能:体验数据库的应用→认识Oracle的工作环境、体验Oracle 10g环境中常用工具操作→数据库的创建与管理→数据表的创建与管理→管理视图→SQL编程语言→PL/SQL编程语言→管理PLSQL存储...
实例109 字符串与数字之间的转换 140 实例110 通过正则表达式对字符串进行匹配查找 141 实例111 通过IP地址查找主机所在地 142 实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与...
本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...