《oracleDML触发器.ppt》由会员分享,可在线阅读,更多相关《oracleDML触发器.ppt(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1主讲人:毛应爽主讲人:毛应爽第10章触发器第10章触发器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发2第第10章章触发器触发器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 O
3、RACLE 10g 数据库数据库管理、应用与开发管理、应用与开发43 3 3 3、创建触发器的语法格式、创建触发器的语法格式、创建触发器的语法格式、创建触发器的语法格式CREATE OR REPLACE TRIGGERCREATE OR REPLACE TRIGGERCREATE OR REPLACE TRIGGERCREATE OR REPLACE TRIGGER trigger_nametrigger_nametrigger_nametrigger_name-触发器的触发事件触发器的触发事件触发器的触发事件触发器的触发事件 BEFOREBEFOREBEFOREBEFORE|AFTERAFT
4、ERAFTERAFTER|INSTEAD OFINSTEAD OFINSTEAD 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_
5、body;trigger_body;trigger_body;trigger_body;-语句体语句体语句体语句体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第第10章章触发器触发器10.1触发器概述触发器概述10.2DML触发器触发器10.3替代触发器替代触发器10.4系统事件触发器系统事件触发器10.5用户事件触发器用户事件触发器10.6管理触发器管理触发器ORACLE 10g ORACLE 10g 数据库数据库管理、应
8、用与开发管理、应用与开发710.2DML触发器触发器DMLDML触发器是针对某个表进行触发器是针对某个表进行触发器是针对某个表进行触发器是针对某个表进行DMLDML操作时触发的。操作时触发的。操作时触发的。操作时触发的。语法格式:语法格式:语法格式:语法格式:CREATE OR REPLACE TRIGGERCREATE OR REPLACE TRIGGERCREATE OR REPLACE TRIGGERCREATE OR REPLACE TRIGGER trigger_name trigger_name trigger_name trigger_name BEFOREBEFOREBEFOR
9、EBEFORE|AFTERAFTERAFTERAFTER|INSERTINSERTINSERTINSERT|DELETEDELETEDELETEDELETE|UPDATEUPDATEUPDATEUPDATE OFOFOFOF column,columncolumn,columncolumn,columncolumn,column ONONONON table_name|view_name table_name|view_name table_name|view_name table_name|view_name REFERENCINGREFERENCINGREFERENCINGREFERENC
10、ING OLDOLDOLDOLD ASold_name|ASold_name|ASold_name|ASold_name|NEWNEWNEWNEW 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;trig
11、ger_body;ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发8在编写触发器源代码之前,必须先在编写触发器源代码之前,必须先确定其触发时间确定其触发时间、触发事件触发事件及及触发器的类型触发器的类型。DML触发器类型类型类型类型行级触发器语句级触发器DML触发器触发器触发触发事件事件事件事件表更新表更新表更新表更新表插入表插入表插入表插入表删除表删除表删除表删除DMLDML触发器触发器触发器触发器触发时间(时机)触发时间(时机)触发时间(时机)触发时间(时机)BEFOREBEFOREAFTERAFTER10.2DML触发器触发器ORACLE 10g
12、ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发9触发事件触发事件(如(如INSERT、UPDATE、DELETE等)等)触发器触发器脚本脚本触发时机触发时机BEFORE(事件)(事件)001001GREENGREENMEDMED98.198.1002002REDREDMEDMED12411241003003REDREDSMALLSMALL100.1100.1004004BLUEBLUELARGELARGE54.954.9005005REDREDMEDMED124.1124.1partnocolorsizeweight触发对象表触发对象表触发对象表触发对象表BEFORE触发器
13、触发器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发10触发器事件触发器事件(如(如INSERT、UPDATE、DELETE等)等)触发器触发器脚本脚本触发时机触发时机AFTER(事件)(事件)001GREENMED98.1002REDMED1241003REDSMALL100.1004BLUELARGE54.9005REDMED124.1partnocolorsizeweight触发对象表触发对象表触发对象表触发对象表AFTERAFTER触发器触发器触发器触发器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1
14、1语句级触发器与行级触发器的区别:语句级触发器与行级触发器的区别:触发器脚本触发器脚本(1次)次)语句级触发器触发器脚本脚本行级行级行级触发器触发器脚本脚本触发器脚本触发器脚本(n次)次)10.2DML触发器触发器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1210.2DML触发器触发器1、语句级触发器、语句级触发器语句级触发器语句级触发器在每个数据修改语句执行后只调用一次在每个数据修改语句执行后只调用一次,而,而不管这一操作将影响到多少行。不管这一操作将影响到多少行。例例1:创建一个:创建一个orderdetails_tablelog表并建立一个表
15、并建立一个AFTER触发器,用于记录是哪些用户删除了触发器,用于记录是哪些用户删除了orderdetails表表中的数据及删除的时间。中的数据及删除的时间。CREATETABLEorderdetails_tablelog(whovarchar2(40),oper_datedate,operatevarchar2(100);ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1310.2DML触发器触发器CREATEORREPLACETRIGGERdele_orderdetailsAFTERdeleteONorderdetailsBEGININSERTINTO
16、orderdetails_tablelogVALUES(user,sysdate,delete);END;注:在该触发器被触发后,尽管一次删除多条记录,注:在该触发器被触发后,尽管一次删除多条记录,但触发器只执行一次插入操作。但触发器只执行一次插入操作。查看触发器的定义文本使用查看触发器的定义文本使用查看触发器的定义文本使用查看触发器的定义文本使用数据字典数据字典数据字典数据字典user_sourceuser_sourceORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1410.2DML触发器触发器2 2、行级触发器、行级触发器、行级触发器、行级触发器行
17、级触发器是按触发语句行级触发器是按触发语句行级触发器是按触发语句行级触发器是按触发语句所处理的行激发的所处理的行激发的所处理的行激发的所处理的行激发的,可以可以可以可以引用受到影响的行值。创建触发器时采用关键字引用受到影响的行值。创建触发器时采用关键字引用受到影响的行值。创建触发器时采用关键字引用受到影响的行值。创建触发器时采用关键字FOR EACH ROWFOR EACH ROWFOR EACH ROWFOR EACH ROW这种访问是通过两个相关的标识符实现的这种访问是通过两个相关的标识符实现的这种访问是通过两个相关的标识符实现的这种访问是通过两个相关的标识符实现的 :old:old :用
18、于存放:用于存放:用于存放:用于存放未进行修改前未进行修改前未进行修改前未进行修改前的数据。的数据。的数据。的数据。:new:new :用于存放进行:用于存放进行:用于存放进行:用于存放进行修改后的数据。修改后的数据。修改后的数据。修改后的数据。ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1510.2DML触发器触发器例例2:创建一个创建一个orderdetails_Rowlog表并建立一个表并建立一个AFTER触发器,用于记录是哪些用户删除了在什么时间删除了触发器,用于记录是哪些用户删除了在什么时间删除了orderdetails表中的哪些行数据。表
19、中的哪些行数据。CREATETABLEorderdetails_rowLog1(whovarchar2(40),oper_datetimestamp,operatevarchar2(100),orderidnumber,productidnumber);ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1610.2DML触发器触发器CREATEORREPLACETRIGGERdeleRow_orderdetailsAFTERdeleteONorderdetailsFOREACHROWBEGININSERTINTOorderdetails_rowLogVAL
20、UES(user,sysdate,delete,:old.orderid,:old.productid);END;ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发1710.2DML触发器触发器例例3:创建一个创建一个BEFORE触发器触发器,使得在向使得在向ORDERS表中表中插入记录之前插入记录之前对对ShippedDate字段进行检测字段进行检测,要求其值不要求其值不允许为周六或周日允许为周六或周日,发货时间应在发货时间应在8-18点之间。否则将提点之间。否则将提示错误示错误发货时间应为工作时间发货时间应为工作时间。ORACLE 10g ORACLE
21、 10g 数据库数据库管理、应用与开发管理、应用与开发1810.2DML触发器触发器CREATEORREPLACETRIGGERsecure_shippeddateBEFOREINSERTONordersForeachrowBEGINBEGINBEGINBEGINIFIF(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)N
22、OT)NOT BETWEEN 8 AND 18)BETWEEN 8 AND 18)THENTHEN RAISE_APPLICATION_ERROR(-20500,RAISE_APPLICATION_ERROR(-20500,发货时间应为工作时发货时间应为工作时间间););END IF;END IF;END;END;ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发19使用使用使用使用“:old”:old”和和和和“:new”:new”应注意:应注意:应注意:应注意:在在BEFORE类型行级触发器和类型行级触发器和AFTER类型行级触发器中类型行级触发器中使
23、用这些标识符。使用这些标识符。在语句级触发器中不要使用这些标识符。在语句级触发器中不要使用这些标识符。在在PL/SQL语句或语句或SQL语句中,这些语句中,这些标识符前加上冒号标识符前加上冒号(:)来引用它们。来引用它们。在行级触发器在行级触发器的的WHEN条件中使用该标识符时,前面条件中使用该标识符时,前面不要不要加冒号(加冒号(:).在在BEFORE触发器触发器中中不能修改不能修改“:old”,在,在AFTER触发触发器器中中不能修改不能修改“:new”10.2DML触发器触发器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发20触发时机触发时机BE
24、FORE后,后,:new的值还没有被插入到表里,的值还没有被插入到表里,因此因此:new可以修可以修改,而此时,改,而此时,:old值是表中没有被修改的值,因此不能被修改值是表中没有被修改的值,因此不能被修改触发器触发器脚本脚本触发时机触发时机BEFORE(事件)(事件)001GREENMED98.1002REDMED1241003REDSMALL100.1004BLUELARGE54.9005REDMED124.1partnocolorsizeweight触发对象表:new:oldORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发21触发器事件触发器事件
25、(如(如INSERT、UPDATE、DELETE等)等)触发器触发器脚本脚本:new:old触发时机触发时机AFTER后,后,:new的值已经被插入到表里,因此:new不能修改001GREENMED98.1002REDMED1241003REDSMALL100.1004BLUELARGE54.9005REDMED124.1partnocolorsizeweight触发时机触发时机AFTER(事件)(事件)ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发2210.2DML触发器触发器例句例句例句例句4 4 4 4:用触发器实现在用户添加数据时:用触发器实现
26、在用户添加数据时:用触发器实现在用户添加数据时:用触发器实现在用户添加数据时,使用序列使用序列使用序列使用序列生成的数字生成的数字生成的数字生成的数字,为表的主键提供自动编号的键值。为表的主键提供自动编号的键值。为表的主键提供自动编号的键值。为表的主键提供自动编号的键值。-创建表创建表创建表创建表CREATETABLECREATETABLEtemp_tabletemp_table(temp_idnumber,namevarchar2(30);(temp_idnumber,namevarchar2(30);-创建序列创建序列创建序列创建序列CREATESEQUENCECREATESEQUENCE
27、incrIDincrIDSTARTWITH10STARTWITH10INCREMENTBY5INCREMENTBY5NOMAXVALUENOMAXVALUECACHE10;CACHE10;ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发2310.2DML触发器触发器-创建触发器以提供自动编号的键值创建触发器以提供自动编号的键值CREATEORREPLACETRIGGERincr_triggerBEFOREINSERTONtemp_tableFOREACHROWDECLAREnext_nonumber;BEGINSELECTincrID.nextvalIN
28、TOnext_noFROMDUAL;:new.temp_id:=next_no;END;ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发24当一个触发器中的触发事当一个触发器中的触发事件中既有件中既有删除、更新又有删除、更新又有插入插入时,如何判断触发器时,如何判断触发器是因哪个事件而动作?是因哪个事件而动作?在在IF语句中使用触发器谓词(语句中使用触发器谓词(INSERTING、UPDATING、DELETING)10.2DML10.2DML触发器触发器触发器触发器3、多条件触发形式、多条件触发形式:CREATEORREPLACETRIGGERCREA
29、TEORREPLACETRIGGERBEFOREinsertORupdateORdeleteONBEGINIFINSERTINGTHENENDIF;IFDELETINGTHENENDIF;IFUPDATINGTHENENDIF;End;ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发25例句例句例句例句5 5 5 5:用触发器增强参照完整性约束。当:用触发器增强参照完整性约束。当:用触发器增强参照完整性约束。当:用触发器增强参照完整性约束。当ordersordersordersorders表的表的表的表的orderidorderidorderidorde
30、rid发生变化时,发生变化时,发生变化时,发生变化时,orderdetailsorderdetailsorderdetailsorderdetails表的相关行也跟着进行适表的相关行也跟着进行适表的相关行也跟着进行适表的相关行也跟着进行适当的修改。当的修改。当的修改。当的修改。CREATEORREPLACETRIGGERcascade_updateordersAFTERupdateORdeleteONordersFOREACHROWBEGINIFupdatingTHENUPDATEorderdetailsSETorderdetails.orderid=:new.orderidWHEREorde
31、rdetails.orderid=:old.orderid;ENDIF;IFdeletingTHENDELETEFROMorderdetailsWHEREorderdetails.orderid=:old.orderid;ENDIF;END;10.2DML10.2DML触发器触发器触发器触发器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发2610.2DML触发器触发器4 4、级联触发器、级联触发器、级联触发器、级联触发器把把把把一个数据库触发器的动作一个数据库触发器的动作一个数据库触发器的动作一个数据库触发器的动作与与与与另一个触发器联系起来,另一个触
32、发器联系起来,另一个触发器联系起来,另一个触发器联系起来,使使使使之之之之触发另一个触发器触发另一个触发器触发另一个触发器触发另一个触发器。例例例例5:5:创建创建创建创建3 3个表个表个表个表A A、B B、C C,在表,在表,在表,在表A A上设置一个上设置一个上设置一个上设置一个INSERTINSERT触发触发触发触发器,用于向表器,用于向表器,用于向表器,用于向表B B添加一条记录,在表添加一条记录,在表添加一条记录,在表添加一条记录,在表BB上设置一个上设置一个上设置一个上设置一个INSERTINSERT触触触触发器,用于向表发器,用于向表发器,用于向表发器,用于向表C C添加一条记
33、录,添加一条记录,添加一条记录,添加一条记录,在表,在表,在表,在表CC上设置一个上设置一个上设置一个上设置一个INSERTINSERT触发器,用于对表中的所有记录进行更新触发器,用于对表中的所有记录进行更新触发器,用于对表中的所有记录进行更新触发器,用于对表中的所有记录进行更新(+10(+10)1)1)创建创建创建创建A A、B B、C C三张表三张表三张表三张表CREATETABLEA(AIDnumber);CREATETABLEA(AIDnumber);CREATETABLEB(BIDnumber);CREATETABLEB(BIDnumber);CREATETABLEC(CIDnumb
34、er);CREATETABLEC(CIDnumber);ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发2710.2DML触发器触发器-在表在表A上创建上创建INSERT触发器触发器CREATEORREPLACETRIGGERinsert_aAFTERinsertONABEGININSERTINTObVALUES(1);END;-在表在表B上创建上创建INSERT触发器触发器CREATEORREPLACETRIGGERinsert_bAFTERinsertONBBEGININSERTINTOcVALUES(2);END;ORACLE 10g ORACLE
35、 10g 数据库数据库管理、应用与开发管理、应用与开发2810.2DML触发器触发器-在表在表C上创建上创建INSERT触发器触发器CREATEORREPLACETRIGGERinsert_aAFTERinsertONCBEGINUPDATEaSETaid=aid+10;End;-测试,向测试,向A表插入数据表插入数据5INSERTINTOAVALUES(5);ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发295 5、限制触发器的执行、限制触发器的执行、限制触发器的执行、限制触发器的执行WHENWHEN子句来保证,当某些子句来保证,当某些子句来保证,当
36、某些子句来保证,当某些行满足一定条件时,在该行上行级触发器才被触发。行满足一定条件时,在该行上行级触发器才被触发。行满足一定条件时,在该行上行级触发器才被触发。行满足一定条件时,在该行上行级触发器才被触发。它它它它只适用于行级触发器只适用于行级触发器只适用于行级触发器只适用于行级触发器在在在在WHENWHEN的的的的条条条条件件件件中中中中,oldold和和和和newnew或或或或在在在在REFERENCINGREFERENCING子句中为子句中为子句中为子句中为oldold和和和和newnew起的起的起的起的别名,都不加冒号(:)别名,都不加冒号(:)别名,都不加冒号(:)别名,都不加冒号(
37、:)。10.2DML触发器触发器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发30例例例例6:6:在在在在productsproducts表上创建一个触发器表上创建一个触发器表上创建一个触发器表上创建一个触发器,用于在更新产品用于在更新产品用于在更新产品用于在更新产品单价时,如果是类别为的产品则打九五折,其他的产单价时,如果是类别为的产品则打九五折,其他的产单价时,如果是类别为的产品则打九五折,其他的产单价时,如果是类别为的产品则打九五折,其他的产品价格按需要进行更新。品价格按需要进行更新。品价格按需要进行更新。品价格按需要进行更新。CREATEORR
38、EPLACETRIGGERCREATEORREPLACETRIGGERupdate_prodpriceupdate_prodpriceBEFOREUPDATEOFBEFOREUPDATEOF unitpriceunitpriceONONproductsproductsFOREACHROWFOREACHROWWHEN(new.categoryid=2)WHEN(new.categoryid=2)BEGINBEGIN:new.unitprice:=:old.unitprice*0.95;:new.unitprice:=:old.unitprice*0.95;ENDEND;10.2DML触发器触发器
39、ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发31测试语句测试语句:UPDATEproductsSETunitprice=unitprice+10WHEREproductid=3;UPDATEproductsSETunitprice=unitprice+10WHEREproductid=1;10.2DML触发器触发器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发326 6 6 6、触发时机、触发时机、触发时机、触发时机BEFORE触触发发器器和和AFTER触触发发器器在在触触发发过过程程中中各各自自执执行行的的
40、顺顺序序不不同同。一一般般执执行行的的顺顺序序是是BEFORE触触发发器器、约约束束、表的表的DML操作操作和和AFTER触发器触发器。当一个表上有多个触当一个表上有多个触当一个表上有多个触当一个表上有多个触发器时,每个触发器发器时,每个触发器发器时,每个触发器发器时,每个触发器都是何时触发?都是何时触发?都是何时触发?都是何时触发?10.2DML触发器触发器ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发33触发器的限制触发器的限制触发器的限制触发器的限制CREATE TRIGGER语语句句文文本本的的字字符符长长度度不不能能超超过过32KB;或或者者
41、,如如果果触触发发器器的的逻逻辑辑编编码码超超过过60行行,则则最最好好将将主主要要代代码码保保存存到到存存储储过过程程里里。使使用用时时只只需需从从触触发发器器中中调用存储过程即可。调用存储过程即可。不不要要创创建建递递归归式式触触发发器器,否否则则,系系统统会会因因触触发发器器与与表表之间的循环操作而导致内存用尽,系统崩溃。之间的循环操作而导致内存用尽,系统崩溃。触触发发器器体体内内的的SELECT语语句句只只能能为为SELECTINTO结构,或者为定义游标所使用的结构,或者为定义游标所使用的SELECT语句。语句。触触发发器器中中不不能能使使用用数数据据库库事事务务控控制制语语句句COM
42、MIT,ROLLBACK,SVAEPOINT语句语句;ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发34触发器的限制触发器的限制触发器的限制触发器的限制由由由由触触触触发发发发器器器器所所所所调调调调用用用用的的的的过过过过程程程程或或或或函函函函数数数数也也也也不不不不能能能能使使使使用用用用数数数数据据据据库库库库事事事事务控制语句务控制语句务控制语句务控制语句;不能不能不能不能在触发体内在触发体内在触发体内在触发体内使用使用使用使用DDLDDL语句语句语句语句;触触触触发发发发器器器器中中中中不不不不能能能能声声声声明明明明LONG,LONG,L
43、ONGLONGRAWRAW类类类类型型型型变变变变量量量量,也也也也不不不不能能能能在在在在触触触触发发发发表表表表的的的的LONGLONG或或或或LONGLONG RAWRAW列列列列上上上上使使使使用用用用:new:new和和和和:old:old;触触触触发发发发器器器器内内内内可可可可以以以以读读读读取取取取LOBLOB类类类类型型型型的的的的列列列列值值值值,但但但但不不不不能能能能通通通通过过过过:NEW:NEW修改修改修改修改LOBLOB列中的数据列中的数据列中的数据列中的数据ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发35小小小小结结结结 掌握掌握掌握掌握 1 1、理解触发器的概念及作用、理解触发器的概念及作用2 2、掌握触发器的应用、掌握触发器的应用ORACLE 10g ORACLE 10g 数据库数据库管理、应用与开发管理、应用与开发36策 划:毛应爽课 件 制 作:毛应爽电 话:0431-86822050E-mail地址:谢谢!