已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Oracle 触发器语法关键字: oracle 触发器语法 一 Oracle触发器语法触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,触发器与存储过程的区别在于:存储过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。功能:1、 允许/限制对表的修改2、 自动生成派生列,比如自增字段3、 强制数据一致性4、 提供审计和日志记录5、 防止无效的事务处理6、 启用复杂的业务逻辑触发器触发时间有两种:after和before。1、触发器的语法:CREATE OR REPLACE TIGGER触发器名 触发时间 触发事件ON表名FOR EACH ROWBEGINpl/sql语句END其中:触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。触发时间:指明触发器何时执行,该值可取:before-表示在数据库动作之前触发器执行;after-表示在数据库动作之后出发器执行。触发事件:指明哪些数据库动作会触发此触器: insert:数据库插入会触发此触发器;update:数据库修改会触发此触发器;delete:数据库删除会触发此触发器。表 名:数据库触发器所在的表。for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。2、举例:下面的触发器在更新表auths之前触发,目的是不允许在周末修改表:createtriggerauth_securebeforeinsertorupdateordelete/对整表更新前触发 onauths begin if(to_char(sysdate,DY)=SUN RAISE_APPLICATION_ERROR(-20600,不能在周末修改表auths); endif; end例子: CREATEORREPLACETRIGGERCRM.T_SUB_USERINFO_AUR_NAMEAFTERUPDATEOFSTAFF_NAME ONCRM.T_SUB_USERINFO REFERENCINGOLDASOLDNEWASNEW FOREACHROW declare begin if:NEW.STAFF_NAME!=:OLD.STAFF_NAMEthen begin 客户投诉 updateT_COMPLAINT_MANAGEsetSERVE_NAME=:NEW.STAFF_NAMEwhereSERVE_SEED=:OLD.SEED; 客户关怀 updateT_CUSTOMER_CAREsetEXECUTOR_NAME=:NEW.STAFF_NAME whereEXECUTOR_SEED=:OLD.SEED; 客户服务 updateT_CUSTOMER_SERVICEsetEXECUTOR_NAME=:NEW.STAFF_NAME whereEXECUTOR_SEED=:OLD.SEED; end; endif; endT_sub_userinfo_aur_name; /二 Oracle触发器详解开始: createtriggerbiufer_employees_department_id beforeinsertorupdateofdepartment_idonemployees referencingoldasold_valuenewasnew_value foreachrow when(new_value.department_id80) begin :new_mission_pct:=0; end; /1、触发器的组成部分:1、 触发器名称2、 触发语句3、 触发器限制4、 触发操作1.1、触发器名称 createtriggerbiufer_employees_department_id命名习惯: biufer(beforeinsertupdateforeachrow)employees表名department_id列名1.2、触发语句比如:表或视图上的DML语句DDL语句 数据库关闭或启动,startup shutdown等等 beforeinsertorupdate ofdepartment_id onemployees referencingoldasold_value newasnew_value foreachrow说明:1、 无论是否规定了department_id,对employees表进行insert的时候2、 对employees表的department_id列进行update的时候1.3、触发器限制 when(new_value.department_id80)限制不是必须的。此例表示如果列department_id不等于80的时候,触发器就会执行。其中的new_value是代表更新之后的值。1.4、触发操作是触发器的主体begin :new_mission_pct:=0; end;主体很简单,就是将更新后的commission_pct列置为0触发:insertintoemployees(employee_id,last_name,first_name,hire_date,job_id,email, department_id,salary,commission_pct) values(12345,Chen,Donny,sysdate,12,,60,10000,.25); selectcommission_pctfromemployeeswhereemployee_id=12345;触发器不会通知用户,便改变了用户的输入值。 2、触发器的类型有: 触发器类型:1、 语句触发器2、 行触发器3、INSTEAD OF触发4、 系统条件触发器5、 用户事件触发器2.1、语句级触发器.(语句级触发器对每个DML语句执行一次)是在表上或者某些情况下的视图上执行的特定语句或者语句组上的触发器。能够与INSERT、UPDATE、DELETE或者组合上进行关联。但是无论使用什么样的组合,各个语句触发器都只会针对指定语句激活一次。比如,无论update多少行,也只会调用一次update语句触发器。实例:createorreplacetriggertri_test afterinsertorupdateordeleteontest begin ifupdatingthen dbms_output.put_line(修改); elsifdeletingthen dbms_output.put_line(删除); elsifinsertingthen dbms_output.put_line(插入); endif; end;2.2、行级触发器.(行级触发器对DML语句影响的每个行执行一次)实例一: 触发器 行级触发器 createtabletest(sidnumber,snamevarchar2(20);-创建一个表 createsequenceseq_test;-创建序列 createorreplacetriggertri_test-创建触发器 beforeinsertorupdateofsidontest foreachrow-触发每一行 begin ifinsertingthen selectseq_test.nextvalinto:new.sidfromdual; else raise_application_error(-20020,不允许更新ID值!);-中断程序 endif; end;触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程。本文继续介绍Oracle 触发器语法及实例。 测试,插入几条记录 insertintotestvalues(0,ff); insertintotestvalues(0,ff); insertintotestvalues(0,tt);实例二: 创建一个触发器,无论用户插入新记录,还是修改emp表的job列,都将用户指定的job列的值转换成大写. createorreplacetriggertrig_job beforeinsertorupdateofjob onemp foreachrow begin ifinsertingthen :new.job:=upper(:new.job); else :new.job:=upper(:new.job); endif; end;2.3、instead of触发器.(此触发器是在视图上而不是在表上定义的触发器,它是用来替换所使用实际语句的触发器.)语法如下: createorreplacetriggertrig_test insteadofinsertorupdateon表名 referencingnewasn foreachrow declare . begin . end;2.4、模式触发器.可以在模式级的操作上建立触发器.实例如下: createorreplacetriggerlog_drop_obj afterdroponschema begin insertinto. end;2.5、数据库级触发器.可以创建在数据库事件上的触发器,包括关闭,启动,服务器错误,登录等.这些事件都是实例范围的,不与特定的表或视图关联.实例:createorreplacetriggertrig_name afterstartupondatabase begin . end;2.6、例子:需要对在表上进行DML操作的用户进行安全检查,看是否具有合适的特权。Createtablefoo(anumber); Createtriggerbiud_foo Beforeinsertorupdateordelete Onfoo Begin Ifusernotin(DONNY)then Raise_application_error(-20001,Youdonthaveaccesstomodifythistable.); Endif; End; /即使SYS,SYSTEM用户也不能修改foo表2.7、试验对修改表的时间、人物进行日志记录。1、 建立试验表 createtableemployees_copyasselect*fromhr.employees2、 建立日志表createtableemployees_log( whovarchar2(30), whendate);3、 在employees_copy表上建立语句触发器,在触发器中填充employees_log表。 Createorreplacetriggerbiud_employee_copy Beforeinsertorupdateordelete Onemployees_copy Begin Insertintoemployees_log(Who,when) Values(user,sysdate); End; /4、 测试updateemployees_copysetsalary=salary*1.1; select*fromemployess_log;5、 确定是哪个语句起作用?即是INSERT/UPDATE/DELETE中的哪一个触发了触发器?可以在触发器中使用INSERTING / UPDATING / DELETING条件谓词,作判断:begin ifinsertingthen - elsifupdatingthen - elsifdeletingthen - endif; end; ifupdating(COL1)orupdating(COL2)then - endif;2.8、试验1、 修改日志表 altertableemployees_log add(actionvarchar2(20);2、 修改触发器,以便记录语句类型。 then l_action:=Delete; else raise_application_error(-20001,Youshouldneverevergetthiserror.); Insertintoemployees_log(Who,action,when) Values(user,l_action,sysdate); End;Createorreplacetriggerbiud_employee_copy Beforeinsertorupdateordelete Onemployees_copy Declare
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医共体区域检验信息平台设计报告
- 砂石骨料生产加工基地规划选址论证报告
- 校园智慧安防工程验收方案
- 电梯监控改造工程验收方案
- 养老机构日常安全管控手册
- 化纤布项目节能评估报告
- 国省道路综合运维管理手册
- 光伏电站电气设备维护方案
- 办公室助理的述职报告(3篇)
- 机电设备安全检查规范手册
- 2026秋九上道法完整版教学计划含学情分析与课时进度安排
- 2026年秋季开学幼儿园秋季传染病防控课件
- 2026年部编版新教材道德与法治四年级上册全册教案设计(共4个单元含教学计划)
- 重卡超级充电站场站布局设计
- 2026秋新人教版英语五年级上册单元一Unit 1 Different friends测试卷-基础卷附答案(文档中已插入听力音频)
- 吉利汽车GEELY+品牌VI手册 Geely Auto Communication Guidelines (New Energy 2025)
- 护理带教与患者安全
- 筑梦新学期 2026-2027学年第一学期小学教学工作计划
- 钧达股份光伏电池龙头开拓航天新版图
- 数学绘本汪汪的生日派对
- 无人机遥感图像融合
评论
0/150
提交评论