oracleDML触发器.pptx
《oracleDML触发器.pptx》由会员分享,可在线阅读,更多相关《oracleDML触发器.pptx(61页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1主讲人:毛应爽主讲人:毛应爽第10章触发器第10章触发器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发2第第第第1010章章章章 触触触触发发器器器器10.1触触发器概述器概述10.2DML触触发器器10.3替代触替代触发器器10.4系系统触触发器器10.5用用户事件触事件触发器器10.6管理触管理触发发器器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发31 1 1 1、概念、概念、概念、概念触触触触发发器是在事件器是在事
2、件器是在事件器是在事件发发生生生生时时隐隐式地自式地自式地自式地自动动运行的运行的运行的运行的PL/SQLPL/SQLPL/SQLPL/SQL程程程程序序序序块块,不能接收参数不能接收参数不能接收参数不能接收参数,不能被不能被不能被不能被调调用用用用。2 2 2 2、触、触、触、触发发器的构成器的构成器的构成器的构成触触触触发发器名称器名称器名称器名称触触触触发发器的触器的触器的触器的触发发事件事件事件事件触触触触发发器限制条件器限制条件器限制条件器限制条件触触触触发发器主体器主体器主体器主体10.1触发器概述触发器概述ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管
3、理、应用与开发43 3 3 3、创创建触建触建触建触发发器的器的器的器的语语法格式法格式法格式法格式CREATE OR REPLACE TRIGGERCREATE OR REPLACE TRIGGERCREATE OR REPLACE TRIGGERCREATE OR REPLACE TRIGGER trigger_nametrigger_nametrigger_nametrigger_name-触触触触发发器的触器的触器的触器的触发发事件事件事件事件 BEFOREBEFOREBEFOREBEFORE|AFTERAFTERAFTERAFTER|INSTEAD OFINSTEAD OFINSTE
4、AD OFINSTEAD OF triggering_eventtriggering_eventtriggering_eventtriggering_event WHENWHENWHENWHEN trigger_condition trigger_condition trigger_condition trigger_condition -限制条件限制条件限制条件限制条件 FOR EACH ROWFOR EACH ROWFOR EACH ROWFOR EACH ROW -行行行行级级触触触触发发trigger_body;trigger_body;trigger_body;trigger_bod
5、y;-语语句体句体句体句体10.1触发器概述触发器概述ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发5说说明:明:明:明:trigger_nametrigger_nametrigger_nametrigger_name是触是触是触是触发发器的名称,器的名称,器的名称,器的名称,triggering_eventtriggering_eventtriggering_eventtriggering_event说说明了激明了激明了激明了激发发触触触触发发器的事件(也可器的事件(也可器的事件(也可器的事件(也可能包括特殊的表或能包括特殊的表或能包括特殊的表或能包
6、括特殊的表或视图视图),),),),trigger_bodytrigger_bodytrigger_bodytrigger_body是触是触是触是触发发器的代器的代器的代器的代码码。注意:注意:注意:注意:如果在如果在如果在如果在WHENWHENWHENWHEN子句中指定子句中指定子句中指定子句中指定trigger_conditiontrigger_conditiontrigger_conditiontrigger_condition的的的的话话,则则首先首先首先首先对该对该条件求条件求条件求条件求值值。触触触触发发器主体只有在器主体只有在器主体只有在器主体只有在该该条件条件条件条件为为真真真
7、真值时值时才运行。才运行。才运行。才运行。10.1触发器概述触发器概述ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发6第第第第1010章章章章 触触触触发发器器器器10.1触触发器概述器概述10.2DML触触发器器10.3替代触替代触发器器10.4系系统事件触事件触发器器10.5用用户事件触事件触发器器10.6管理触管理触发发器器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发710.2DML10.2DML触触触触发发器器器器DMLDML触触触触发发器是器是器是器是针对针对某个表某个表某个表某个表进进行行行行DM
8、LDML操作操作操作操作时时触触触触发发的。的。的。的。语语法格式:法格式:法格式:法格式:CREATE OR REPLACE TRIGGERCREATE OR REPLACE TRIGGERCREATE OR REPLACE TRIGGERCREATE OR REPLACE TRIGGER trigger_name trigger_name trigger_name trigger_name BEFOREBEFOREBEFOREBEFORE|AFTERAFTERAFTERAFTER|INSERTINSERTINSERTINSERT|DELETEDELETEDELETEDELETE|UPDAT
9、EUPDATEUPDATEUPDATE OFOFOFOF column,columncolumn,columncolumn,columncolumn,column ONONONON table_name|view_name table_name|view_name table_name|view_name table_name|view_name REFERENCINGREFERENCINGREFERENCINGREFERENCING OLDOLDOLDOLD ASold_name|ASold_name|ASold_name|ASold_name|NEWNEWNEWNEW AS AS AS A
10、S new_namenew_namenew_namenew_name FOR EACH ROWFOR EACH ROWFOR EACH ROWFOR EACH ROW WHENWHENWHENWHEN trigger_condition trigger_condition trigger_condition trigger_condition trigger_body;trigger_body;trigger_body;trigger_body;ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发8在在编写触写触发器源代器源代码之前,必之前,必须先先确定其触
11、确定其触发时间、触触发事件事件及及触触发器的器的类型型。DML触发器类型类型类型类型行级触发器语句级触发器DML触发器触发器触发触发事件事件事件事件表更新表更新表更新表更新表插入表插入表插入表插入表删除表删除表删除表删除DMLDML触发器触发器触发器触发器触发时间(时机)触发时间(时机)触发时间(时机)触发时间(时机)BEFOREBEFOREAFTERAFTER10.2DML10.2DML触触触触发发器器器器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发9触发事件触发事件(如(如INSERT、UPDATE、DELETE等)等)触发器触发器脚本脚本触发时
12、机触发时机BEFORE(事件)(事件)001001GREENGREENMEDMED98.198.1002002REDREDMEDMED12411241003003REDREDSMALLSMALL100.1100.1004004BLUEBLUELARGELARGE54.954.9005005REDREDMEDMED124.1124.1partnocolorsizeweight触发对象表触发对象表触发对象表触发对象表BEFOREBEFORE触触触触发发器器器器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发10触发器事件触发器事件(如(如INSERT、UPD
13、ATE、DELETE等)等)触发器触发器脚本脚本触发时机触发时机AFTER(事件)(事件)001GREENMED98.1002REDMED1241003REDSMALL100.1004BLUELARGE54.9005REDMED124.1partnocolorsizeweight触发对象表触发对象表触发对象表触发对象表AFTERAFTER触发器触发器触发器触发器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发11语句级触发器与行级触发器的区别:语句级触发器与行级触发器的区别:触发器脚本触发器脚本(1次)次)语句级触发器触发器脚本脚本行级行级行级触发器触发
14、器脚本脚本触发器脚本触发器脚本(n次)次)10.2DML10.2DML触触触触发发器器器器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1210.2DML10.2DML触触触触发发器器器器1、语句句级触触发器器语句句级触触发器器在每个数据修改在每个数据修改语句句执行后只行后只调用一次用一次,而,而不管不管这一操作将影响到多少行。一操作将影响到多少行。例例1:创建一个建一个orderdetails_tablelog表并建立一个表并建立一个AFTER触触发器,用于器,用于记录是哪些用是哪些用户删除了除了orderdetails表表中的数据及中的数据及删除的
15、除的时间。CREATETABLEorderdetails_tablelog(whovarchar2(40),oper_datedate,operatevarchar2(100);ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1310.2DML10.2DML触触触触发发器器器器CREATEORREPLACETRIGGERdele_orderdetailsAFTERdeleteONorderdetailsBEGININSERTINTOorderdetails_tablelogVALUES(user,sysdate,delete);END;注:在注:在该触触
16、发器被触器被触发后,尽管一次后,尽管一次删除多条除多条记录,但触但触发器只器只执行一次插入操作。行一次插入操作。查看触发器的定义文本使用查看触发器的定义文本使用查看触发器的定义文本使用查看触发器的定义文本使用数据字典数据字典数据字典数据字典user_sourceuser_sourceORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1410.2DML10.2DML触触触触发发器器器器2 2、行、行、行、行级级触触触触发发器器器器行行行行级级触触触触发发器是按触器是按触器是按触器是按触发语发语句句句句所所所所处处理的行激理的行激理的行激理的行激发发的的的的,
17、可以可以可以可以引用受到影响的行引用受到影响的行引用受到影响的行引用受到影响的行值值。创创建触建触建触建触发发器器器器时时采用关采用关采用关采用关键键字字字字FOR EACH ROWFOR EACH ROWFOR EACH ROWFOR EACH ROW这这种种种种访问访问是通是通是通是通过过两个相关的两个相关的两个相关的两个相关的标识标识符符符符实现实现的的的的 :old:old :用于存放:用于存放:用于存放:用于存放未未未未进进行修改前行修改前行修改前行修改前的数据。的数据。的数据。的数据。:new:new :用于存放:用于存放:用于存放:用于存放进进行行行行修改后的数据。修改后的数据。
18、修改后的数据。修改后的数据。ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1510.2DML触触发器器例例2:创建一个建一个orderdetails_Rowlog表并建立一个表并建立一个AFTER触触发器,用于器,用于记录是哪些用是哪些用户删除了在什么除了在什么时间删除了除了orderdetails表中的哪些行数据。表中的哪些行数据。CREATETABLEorderdetails_rowLog1(whovarchar2(40),oper_datetimestamp,operatevarchar2(100),orderidnumber,productid
19、number);ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1610.2DML10.2DML触触触触发发器器器器CREATEORREPLACETRIGGERdeleRow_orderdetailsAFTERdeleteONorderdetailsFOREACHROWBEGININSERTINTOorderdetails_rowLogVALUES(user,sysdate,delete,:old.orderid,:old.productid);END;ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1710.2D
20、ML触触发器器例例3:创建一个建一个BEFORE触触发器器,使得在向使得在向ORDERS表中表中插入插入记录之前之前对ShippedDate字段字段进行行检测,要求其要求其值不不允允许为周六或周日周六或周日,发货时间应在在8-18点之点之间。否。否则将提将提示示错误发货时间应为工作工作时间。ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1810.2DML触触发器器CREATEORREPLACETRIGGERsecure_shippeddateBEFOREINSERTONordersForeachrowBEGINBEGINBEGINBEGINIFIF(T
21、O_CHAR(:new.shippeddate,(TO_CHAR(:new.shippeddate,DYDY)in)in(SATSAT,SUNSUN)OR)OR(to_number(TO_CHAR(:new.shippeddate,(to_number(TO_CHAR(:new.shippeddate,HH24HH24)NOT)NOT BETWEEN 8 AND 18)BETWEEN 8 AND 18)THENTHEN RAISE_APPLICATION_ERROR(-20500,RAISE_APPLICATION_ERROR(-20500,发货时间应为工作工作时间););END IF;END
22、 IF;END;END;ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发19使用使用使用使用“:old”:old”和和和和“:new”:new”应应注意:注意:注意:注意:在在BEFORE类型行型行级触触发器和器和AFTER类型行型行级触触发器中器中使用使用这些些标识符。符。在在语句句级触触发器中不要使用器中不要使用这些些标识符。符。在在PL/SQL语句或句或SQL语句中,句中,这些些标识符前加上冒号符前加上冒号(:)来引用它来引用它们。在行在行级触触发器器的的WHEN条件中使用条件中使用该标识符符时,前面,前面不要不要加冒号(加冒号(:).在在BEFO
23、RE触触发器器中中不能修改不能修改“:old”,在,在AFTER触触发器器中中不能修改不能修改“:new”10.2DML10.2DML触触触触发发器器器器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发20触发时机触发时机BEFORE后,后,:new的值还没有被插入到表里,的值还没有被插入到表里,因此因此:new可以修可以修改,而此时,改,而此时,:old值是表中没有被修改的值,因此不能被修改值是表中没有被修改的值,因此不能被修改触发器触发器脚本脚本触发时机触发时机BEFORE(事件)(事件)001GREENMED98.1002REDMED1241003
24、REDSMALL100.1004BLUELARGE54.9005REDMED124.1partnocolorsizeweight触发对象表:new:oldORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发21触发器事件触发器事件(如(如INSERT、UPDATE、DELETE等)等)触发器触发器脚本脚本:new:old触发时机触发时机AFTER后,后,:new的值已经被插入到表里,因此:new不能修改001GREENMED98.1002REDMED1241003REDSMALL100.1004BLUELARGE54.9005REDMED124.1partn
25、ocolorsizeweight触发时机触发时机AFTER(事件)(事件)ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发2210.2DML10.2DML触触触触发发器器器器例句例句例句例句4 4 4 4:用触:用触:用触:用触发发器器器器实现实现在用在用在用在用户户添加数据添加数据添加数据添加数据时时,使用序列使用序列使用序列使用序列生成的数字生成的数字生成的数字生成的数字,为为表的主表的主表的主表的主键键提供自提供自提供自提供自动编动编号的号的号的号的键值键值。-创创建表建表建表建表CREATETABLECREATETABLEtemp_tablete
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracleDML 触发器
限制150内