oracle触发器

2024-09-09

oracle触发器 篇1

关键词:Oracle,MySQL,触发器

1、引言

Oracle是甲骨文公司开发的功能强大的网络关系型数据库, 是大型数据库的代表。而My SQL则是甲骨文公司针对中小型企业的低成本要求而提供的小体积关系型数据库。两者之间的存在很多区别, 比如在完整性约束、存储过程、自定义函数、预定义函数、触发器等等功能上都存在差异。只有了解并且掌握好这些区别, 才能更好的选择和使用这两款数据库。本文结合了作者的一些经验, 主要分析和探讨了Oracle和My SQL在触发器方面的一些差异, 文章中所涉及的数据库版本为Oracle11g和My SQL5.6。

2、Oracle和My SQL在触发器上的差异分析

首先, 什么是触发器?触发器其实也是一段代码, 但是它跟普通的代码不同, 它既不能够被调用, 也不能够被人工启动, 同时还不能够接受参数。触发器只在事件运行过程中被隐式触发, 从而实现某些功能。

Oracle与My SQL在触发器定义上就存在一些差异。Oracle对于触发器的定义语法如下:

方括号中的内容是可选的, “|”号表示两边的内容任选一个。

主体程序

trigger_event为启动触发器的事件, 通常是对数据库的表对象做update、delete或者insert操作。对于Oracle, 可以通过or, 将这三种操作的任意两种或者三种同时涉及, 比如before update or delete表明对表中数据做修改, 或者删除都会启动该触发器。对于My SQL, 则只能三选一, 所以如果要涉及数据修改和删除, 就必须创建两个触发器。

另外, Oracle的trigger_event可以针对数据库表中的某些列。比如update of credit on course, 表明该触发器只在修改course表中的credit列的数据时才启动, 对course表其它列的数据进行修改时触发器不会被触发。而My SQL没办法定义到数据库表中的列, 因此只能定义成update on course, 这样表中的任一列的数据被修改, 触发器都会被触发。

Oracle的触发器在被隐式触发之后, 还可以通过trigger_condition中的条件判断来决定是否执行触发器中的PL/SQL程序。比如when (new.credit>old.credit) 表明只有在credit新的值大于原来的值的时候, PL/SQL程序才被执行。而My SQL没有这项功能, 要实现条件判断, 只能在触发器的主体部分通过条件句进行设置。

Oracle和My SQL都是以分号“;”作为SQL语句结束的标志, 而触发器主体程序中通常要涉及SQL语句, 为了不让SQL语句在触发器创建过程中被执行, My SQL要求在创建触发器之前采用DELIMTER语句修改结束标志。比如DELIMITER$$, 然后在触发器创建语句最后输入“$$”, 这样触发器才会被创建。之后就算运行单条SQL语句, 也是输入“$$”作为结束符号, 输入“;”语句将不再被执行。如果想继续使用“;”作为结束标志, 可以输入DELIMITER;来实现。而Oracle不用进行这样的设置, 它会自动进行判断。

最后一点, 也是最为重要的, Oracle的触发器能够实现中断触发程序的运行并输出自定义的错误信息。My SQL的触发器不能有返回值, 也就是不能涉及select语句, 如果触发程序是insert/update语句, 触发器中不能对相同表做insert/update操作, 另外触发器也没办法中断触发程序的运行。比如修改course表中credit列的值, 如果新的值是原来值的两倍或以上则不允许修改。Oracle的触发器可以创建如下:

My SQL的触发器只能是判断credit的新值是否等于或超过原来值的两倍, 如果是, 将新的值改成原来的值, 如果不是, 则新的值不用改动, 然后执行将新的值替代旧的值的操作。其创建语句如下:

分别在Oracle和My SQL中创建相同的表course, 并且插入两条相同的记录, 第一条记录的credit值为5, 第二条记录的credit值为4。当执行update course set credit=8这个SQL语句之后, 两个触发器都被触发, 但结果有点不一样。Oracle弹出错误信息, 然后两条记录都没有被修改, 而My SQL的第一条记录被改成了8, 第二条记录还是4, 可以看到Oracle的触发器在执行是当成一个事务来处理, 要么全部记录都修改, 要么都不修改, 而My SQL没有事务处理的功能, 所以采用了分步执行的方式。

3、结束语

Oracle和My SQL都支持触发器, 但两者在功能上存在差异。本文作者的体会是Oracle的触发器更注重保持数据的完整性和一致性, 而My SQL的触发器更为简单易懂。由于My SQL不支持事务处理, 因此当需要通过条件判断来实现是否中断操作的时候, 应该选择存储过程, 如果希望操作有返回值, 则应该选择函数来实现。

参考文献

[1]汤荷美, 周立柱, 冯建华等.数据库技术及应用[M].北京:清华大学出版社, 2011.

[2]王飞飞, 崔洋, 贺亚茹.My SQL数据库应用从入门到精通 (第二版) [M].北京:中国铁道出版社, 2014.

[3]刘增杰, 李坤.My SQL5.6从零开始学[M].北京:清华大学出版社, 2013.

oracle触发器 篇2

魏书记在讲话中指出,开展“解放思想、改革开放、创新驱动、科学发展”大讨论活动,是全面贯彻党的十八精神、深入落实党的十八大精神的重要举措,也是实现我院进位赶超、跨越发展的关键,全体教职员工要真正学深吃透党的十八大精神和市委八届五次全会精神,切实将党的理论创新成果和市委的决策部署转化成促进学院科学发展的自觉行动;要深刻查找与学院科学发展不相适应的思想观念,进一步开创解放思想的新境界;要扎实深入开展对标行动,在学习先进、调查研究、对比分析中,查找差距不足,制定赶超计划;要紧密联系学院实际,着力解决影响学院科学发展的突出问题;要把创新突破贯彻始终,坚持边学习边讨论边实践,把大讨论成果转化为解决问题的科学决策、赶超进位的科学路径、科学发展的实际行动。

魏书记指出,要紧密围绕“解放思想、改革开放、创新驱动、科学发展”这一主题,紧密联系思想和工作实际,从如何在办学理念上解放思想,在培养现代职业人的方法和路径上寻求新突破;如何在人才观念上解放思想,在引进人才、培养人才、用好人才上寻求新突破;如何在体制创新上解放思想,在建立长效动能机制上寻求新突破;如何在服务区域经济社会发展上解放思想,在实现校企的深度合作上寻求新突破;如何在目标管理上解放思想,在推进全面对标,提升学院核心竞争力上寻求新突破;如何在深化改革育人模式上解放思想,在“立德树人”提高人才培养质量上实现新突破;如何在营造发展环境上解放思想,在提升学院发展能力上实现新突破;如何在干部队伍建设上解放思想,在提升学院凝聚力战斗力上实现新突破等八个方面开展讨论,探索促进学院改革发展的新思路、新途径、新举措,努力实现思想上明显解放,作风上明显改善,举措上明显创新,工作上明显突破,为建设人民满意、市内领先、国内知名、特色鲜明的民办院校奠定坚实的基础。

上一篇:激活企业多面手下一篇:中国汇市