`
yuanlanjun
  • 浏览: 1185963 次
文章分类
社区版块
存档分类
最新评论

触发器的相关知识与实例

 
阅读更多

触发器

触发器必须由事件触发.

触发事件分为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;

分享到:
评论

相关推荐

    SQL触发器知识和实例

    2010年学数据库触发器知识和心得供给有需要的朋友(有实例哦。)

    Oracle 触发器语法及实例基础知识

    这是个pdf格式的文件,主要描述了Oracle 触发器语法及实例基础知识。希望能够给大家带来帮助(*^__^*)

    oracle存储过程及触发器总结

    介绍了oracle存储过程的实现、存储过程的调用和触发器语法及实例的基础知识

    SQL Server 触发器实例详解

    触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的,接下来本文通过实例详解sqlserver触发器,对sqlserver触发器相关知识感兴趣的朋友一起学习吧

    精通Delphi数据库设计与实例开发配套光盘

    这些综合案例的讲解并非仅仅介绍相关程序构造、搭建过程,而是与前面的基础知识综合贯穿起来,将理论知识与实际操作完美结合,强化读者的学习效果。最后,本书还介绍了使用install shield发布数据库应用程序的方法。...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例273 使用内连接选择一个表与另一个表中行相关的所有行 9.14 外连接查询 实例274 LEFT OUTER JOIN查询 实例275 RIGHT OUTER JOIN查询 实例276 使用外连接进行多表联合查询 9.15 利用IN进行查询 实例277 ...

    SQL Server 2005应用开发技术与典型实例代码

    《SQL Server 2005应用开发技术与典型实例》采用案例教学的形式,由浅入深、循序渐进地介绍了SQL Server 2005数据库平台的知识体系。全书分为15章:第1章和第2章介绍SQL Server 2005的基本知识及管理和开发工具:第3...

    实例解读51单片机完全学习与应用

    还有那困扰了很多人的单片机编程语言……本篇将生动地通过诸多实例带出单片机的基础知识,在遇到相关模拟电路、数字电路、元器件知识时会有及时的补充说明,带领读者一点点揭开单片机的神秘面纱。 第5章 单片机的...

    Oracle数据库应用与开发实例教程[吴海波主编][电子教案]

    按照如下顺序传授知识与训练技能:体验数据库的应用→认识Oracle的工作环境、体验Oracle 10g环境中常用工具操作→数据库的创建与管理→数据表的创建与管理→管理视图→SQL编程语言→PL/SQL编程语言→管理PLSQL存储...

    MySQL数据库基础与实例教程 中文PPT版 4.25MB.rar

    本书使用量身定制的案例全面讲解MySQL基础知识以及MySQL5.6新特性,InnoDB全文检索、触发器、存储过程、函数、事务、锁等概念,全部融入该案例。 本书尽量将抽象问题形象化、图形化,复杂问题简单化。即便读者没有...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例273 使用内连接选择一个表与另一个表中行相关的所有行 9.14 外连接查询 实例274 LEFT OUTER JOIN查询 实例275 RIGHT OUTER JOIN查询 实例276 使用外连接进行多表联合查询 9.15 利用IN进行查询 实例277 ...

    Oracle数据库应用与开发实例教程

    按照如下顺序传授知识与训练技能:体验数据库的应用→认识Oracle的工作环境、体验Oracle 10g环境中常用工具操作→数据库的创建与管理→数据表的创建与管理→管理视图→SQL编程语言→PL/SQL编程语言→管理PLSQL存储...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例109 字符串与数字之间的转换 140 实例110 通过正则表达式对字符串进行匹配查找 141 实例111 通过IP地址查找主机所在地 142 实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...

Global site tag (gtag.js) - Google Analytics