第十五章-触发器_第1页
第十五章-触发器_第2页
第十五章-触发器_第3页
第十五章-触发器_第4页
第十五章-触发器_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第15章触发器知识点回顾了解和使用子程序存储过程函数了解和使用程序包2本章目标触发器的概念触发器类型及创建方法理解和应用触发器3触发器触发器是当特定事件出现时自动执行的存储过程特定事件可以是执行更新的DML语句和DDL语句触发器不能被显式调用触发器的功能:自动生成数据自定义复杂的安全权限提供审计和日志记录启用复杂的业务逻辑4创建触发器的语法CREATE[ORREPLACE]TRIGGERtrigger_nameAFTER|BEFORE|INSTEADOF[INSERT][[OR]UPDATE[OFcolumn_list]][[OR]DELETE]ONtable_or_view_name[REFERENCING{OLD[AS]old/NEW[AS]new}][FOREACHROW][WHEN(condition)]pl/sql_block;5触发器的组成部分3-1触发器由三部分组成:触发器语句(事件)定义激活触发器的DML

事件和DDL

事件触发器限制执行触发器的条件,该条件必须为真才能激活触发器触发器操作(主体)包含一些SQL

语句和代码,它们在发出了触发器语句且触发限制的值为真时运行6触发器的组成部分3-2SQL>CREATEORREPLACETRIGGERtrig_sal AFTERUPDATEOFsalONemp

…触发器语句为emp表创建

trig_sal触发器在更新sal列之后激活触发器触发器限制SQL> … FOREACHROW WHEN(NEW.sal>OLD.sal) DECLARE Sal_diffNUMBER; … 只有在WHEN子句中的条件得到满足时,才激活trig_sal触发器触发器操作SQL>… BEGIN sal_diff:=:NEW.sal-:OLD.sal; DBMS_OUTPUT.PUT_LINE(‘工资差额:’sal_diff); END;如果WHEN子句中的条件得到满足,将执行BEGIN块中的代码7触发器的组成部分3-3Oracle数据库更新表保存更新激活触发器AFTER触发器的工作原理BEFORE触发器的工作原理更新表激活触发器保存更新Oracle数据库8创建触发器CREATEORREPLACETRIGGERtrig_stuBEFOREUPDATEOFf_classONmartin.t_studentFOREACHROWWHEN(OLD.f_class=1)BEGIN:NEW.f_class:=1;END;/9触发器类型8-1触发器的类型有:触发器类型INSTEADOF触发器DML触发器系统触发器10触发器类型8-211DML触发器如果在表或视图上创建触发器,并且触发事件由DML语句组成,这种触发器称为DML触发器。系统触发器如果在方案或数据库上创建触发器,则触发事件由DDL或数据库操作语句组成,触发器称为系统触发器。INSTEADOF触发器(1)在非编辑视图上创建的DML触发器。(2)在CREATE语句上定义的系统触发器,数据库触发INSTEADOF触发器而不是运行触发语句。触发器类型8-3DML行级触发器SQL>createtablet_temp(f_idnumber,f_namevarchar2(20));SQL>createsequenceseq_tempid;SQL>createtriggertrig_tempbeforeinsertorupdateoff_idont_tempforeachrowbeginifinsertingthenselectseq_tempid.nextvalinto:New.f_idfromdual;elseRaise_Application_Error(-20020,'不允许更新ID值!');endif;end;/12触发器类型8-4DML语句级触发器SQL>createorreplacetriggertrig_stuafterinsertordeleteorupdateont_studentbeginifinsertingthendbms_output.put_line('已添加t_student中的数据');elsifdeletingthendbms_output.put_line('已删除t_student中的数据');elsifupdatingthendbms_output.put_line('已更新t_student中的数据');endif;end;/13触发器类型8-5DML触发器中的条件谓词DML触发器的触发事件可以由多个触发语句组成。当其中任一个触发语句触发触发器时,触发器可以通过使用这些条件谓词来确定哪一个。14条件谓词触发语句INSERTINGINSERT语句UPDATINGUPDATE语句UPDATING('column')UPDATE指定列的语句DELETINGDELETE语句触发器类型8-6DML中的INSTEADOF触发器SQL>CREATEORREPLACETRIGGERupd_ord_viewINSTEADOFUPDATEONord_viewFOREACHROWBEGIN UPDATEorder_masterSETvencode=:NEW.vencode WHEREorderno=:NEW.orderno; DBMS_OUTPUT.PUT_LINE(‘已激活触发器');END;/15触发器类型8-7DML中的伪记录在行级别触发的触发器可以使用相关名称访问正在处理的行中的数据。常用的相关名称默认为OLD和NEWOLD和NEW也称为伪记录(pseudorecord),因为它们具有记录结构。伪记录的结构是table_name%ROWTYPE16触发语句OLD.field值NEW.field值INSERTNULL插入后的值UPDATE更新前的值更新后的值DELETE删除前的值NULL触发器类型8-8系统触发器中的schema触发器SQL>createtablet_droppedobj(f_objnamevarchar2(20),f_objtypevarchar2(20),f_dropdatedate);SQL>createorreplacetriggertrig_dropobjafterdroponschemabegininsertintot_droppedobjvalues(Ora_Dict_Obj_Name,Ora_Dict_Obj_Type,Sysdate);end;/17启用、禁用和删除触发器启用和禁用触发器删除触发器SQL>ALTERTRIGGERtrig_stuDISABLE;SQL>ALTERTRIGGERtrig_stuENABLE;SQL>DROPTRIGGERtrig_stu;18查看有关触发器的信息USER_TRIGGERS数据字典视图包含有关触发器的信息SQL>SELECTTRIGGER_NAMEFROMUSER_TRIGGER

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论