配色: 字号:
第七章plsql 触发器
2017-05-16 | 阅:  转:  |  分享 
  
触发器(trigger)一.介绍触发器是在数据库里以独立的对象存储,是由一个事件来启动运行,即触发器是当某个事件发生时自动地隐式运行,并且
,触发器不能接收参数,所以运行触发器就叫触发或点火,oracle事件指的是对数据库表进行的insert,update及delete
操作或对视图进行类似的操作。二、触发器类型DML触发器:Oralce可以在DML语句进行触发,可以在DML操作前或操作后进行触发,
并且可以对每个行或语句操作上进行触发。替代触发器:由于在oracle里,不能直接对由两个以为的表建立的视图进行操作,所以给出了替代
触发器。系统触发器:它可以在oracle数据库系统的事件中进行触发,如oracle系统的启动与关闭等。触发器组成:触发事件:即可何
种情况下触发trigger;例如:insert,update,delete.触发时间:即该trigger,是在触发事件发生之前(b
efore)还是之后(after)触发,也就是触发事件和该trigger的操作顺序。触发器本身:即该trigger触发之后的目的和
意图,正是触发器本身要做的事情。例如:PL/SQL块。触发频率:说明触发器内定义的动作被执行的次数。即语句级触发器和行级触发器。语
句(statement)级触发器:是指当某触发事件发生时,该触发器只执行一次;行级(row)触发器:是指当某触发器事件发生时,对受
到该操作影响的每一行数据,触发器都单独执行一次。触发器语法:Createtriggertrigger_nameBefore|a
fterInsert|update|deleteofcloumm(,cloumn..)Ontable_nameForeac
hrowWhenconditionTrigger_body:例:一个helloworld级别的触发器createorrep
lacetriggerhello_triggerafterupdateonemployees--foreachrow
begindbms_output.put_line(''helloword'');end;然后执行:updateemploye
essetsalary=salary+100whereemployees_id=80;例:触发器的hellowo
rld:编写一个触发器,在向emp表中插入记录时,打印''helloworld''createorreplacetr
iggeremp_triggerafterinsertonempforeachrowbegindbms_output
.put_line(''helloworld'');end;例:使用:new,:old修饰符createorreplace
triggeremployees_triggerafterupdateonemployeesforeachrowbe
gindbms_output.put_line(''旧工资''||:old.salary||'',新工资''||:new.
salary);end;例:编写一个触发器,在对my_emp记录进行删除的时候,在my_emp_bak表中备份对应的
记录1).准备工作:createtablemy_empasselectemployee_idid,last_nam
ename,salarysalfromemployeescreatetablemy_emp_bakasselec
temployee_idid,last_namename,salarysalfromemployeeswhere
1=22).createorreplacetriggerbak_emp_triggerbeforedelete
onmy_empforeachrowbegininsertintomy_emp_bakvalues(:old.
id,:old.name,:old.sal);end;、执行:deletefrommy_emp;Selectfrommy_emp_bak
献花(0)
+1
(本文系胡小哈526首藏)