oracleDML触发器7977.pptx
《oracleDML触发器7977.pptx》由会员分享,可在线阅读,更多相关《oracleDML触发器7977.pptx(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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触触触触发发器是器是器是器是针对针对
8、某个表某个表某个表某个表进进行行行行DMLDML操作操作操作操作时时触触触触发发的。的。的。的。语语法格式:法格式:法格式:法格式:CREATE OR REPLACE TRIGGERCREATE OR REPLACE TRIGGERCREATE OR REPLACE TRIGGERCREATE OR REPLACE TRIGGER trigger_name trigger_name trigger_name trigger_name BEFOREBEFOREBEFOREBEFORE|AFTERAFTERAFTERAFTER|INSERTINSERTINSERTINSERT|DELETEDELE
9、TEDELETEDELETE|UPDATEUPDATEUPDATEUPDATE 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|NEW
10、NEWNEWNEW AS AS AS AS 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、DEL
12、ETE等)等)触发器触发器脚本脚本触发时机触发时机BEFORE(事件)(事件)001001GREENGREENMEDMED98.198.1002002REDREDMEDMED12411241003003REDREDSMALLSMALL100.1100.1004004BLUEBLUELARGELARGE54.954.9005005REDREDMEDMED124.1124.1partnocolorsizeweight触发对象表触发对象表触发对象表触发对象表BEFOREBEFORE触触触触发发器器器器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发10触发器事
13、件触发器事件(如(如INSERT、UPDATE、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触触发器,用于器,用于记录是哪些用是哪些用户删除了除了orderde
15、tails表表中的数据及中的数据及删除的除的时间。CREATETABLEorderdetails_tablelog(whovarchar2(40),oper_datedate,operatevarchar2(100);ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1310.2DML10.2DML触触触触发发器器器器CREATEORREPLACETRIGGERdele_orderdetailsAFTERdeleteONorderdetailsBEGININSERTINTOorderdetails_tablelogVALUES(user,sysdate,d
16、elete);END;注:在注:在该触触发器被触器被触发后,尽管一次后,尽管一次删除多条除多条记录,但触但触发器只器只执行一次插入操作。行一次插入操作。查看触发器的定义文本使用查看触发器的定义文本使用查看触发器的定义文本使用查看触发器的定义文本使用数据字典数据字典数据字典数据字典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),ord
19、eridnumber,productidnumber);ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1610.2DML10.2DML触触触触发发器器器器CREATEORREPLACETRIGGERdeleRow_orderdetailsAFTERdeleteONorderdetailsFOREACHROWBEGININSERTINTOorderdetails_rowLogVALUES(user,sysdate,delete,:old.orderid,:old.productid);END;ORACLE 10g ORACLE 10g 数据库数据库管理、
20、应用与开发管理、应用与开发1710.2DML触触发器器例例3:创建一个建一个BEFORE触触发器器,使得在向使得在向ORDERS表中表中插入插入记录之前之前对ShippedDate字段字段进行行检测,要求其要求其值不不允允许为周六或周日周六或周日,发货时间应在在8-18点之点之间。否。否则将提将提示示错误发货时间应为工作工作时间。ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1810.2DML触触发器器CREATEORREPLACETRIGGERsecure_shippeddateBEFOREINSERTONordersForeachrowBEGINB
21、EGINBEGINBEGINIFIF(TO_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,发货时间应为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracleDML 触发器 7977
限制150内