




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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:数据库插入会触发此触发器;Oracle触发器语法(二)update:数据库修改会触发此触发器; delete:数据库删除会触发此触发器。表 名:数据库触发器所在的表。for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。2、举例:下面的触发器在更新表auths之前触发,目的是不允许在周末修改表:createtriggerauth_securebeforeinsertorupdateordelete/对整表更新前触发 onauthsbeginif(to_char(sysdate,DY)=SUNRAISE_APPLICATION_ERROR(-20600,不能在周末修改表auths);endif;end例子:CREATEORREPLACETRIGGERCRM.T_SUB_USERINFO_AUR_NAMEAFTERUPDATEOFSTAFF_NAME ONCRM.T_SUB_USERINFOREFERENCINGOLDASOLDNEWASNEWFOREACHROWdeclarebeginif:NEW.STAFF_NAME!=:OLD.STAFF_NAMEthenbegin客户投诉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触发器语法(三) 二 Oracle触发器详解开始: createtrigger biufer_employees_department_id before insert or update of department_id on employeesreferencing oldasold_valuenewasnew_valueforeachrowwhen(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语句Oracle触发器语法(四)数据库关闭或启动,startup shutdown等等beforeinsertorupdate ofdepartment_idonemployeesreferencingoldasold_valuenewasnew_valueforeachrow说明: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;触发器不会通知用户,便改变了用户的输入值。Oracle触发器详解开始:create trigger biufer_employees_department_idbefore insert or update of department_id on employeesreferencing old as old_value new as new_valuefor each rowwhen (new_value.department_id80 )begin:new_mission_pct :=0;end;/1、触发器的组成部分:1、 触发器名称2、 触发语句3、 触发器限制4、 触发操作1.1、触发器名称create trigger biufer_employees_department_id命名习惯:biufer(before insert update for each row)employees表名department_id列名1.2、触发语句比如:表或视图上的DML语句DDL语句数据库关闭或启动,startup shutdown等等before insert or updateof department_idon employeesreferencing old as old_valuenew as new_valuefor each row说明: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触发:insert into employees(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);select commission_pct from employees where employee_id=12345;触发器不会通知用户,便改变了用户的输入值。2、触发器的类型有:触发器类型:1、 语句触发器2、 行触发器3、INSTEAD OF触发4、 系统条件触发器5、 用户事件触发器2.1、语句级触发器.(语句级触发器对每个DML语句执行一次)是在表上或者某些情况下的视图上执行的特定语句或者语句组上的触发器。能够与INSERT、UPDATE、DELETE或者组合上进行关联。但是无论使用什么样的组合,各个语句触发器都只会针对指定语句激活一次。比如,无论update多少行,也只会调用一次update语句触发器。实例:create or replace trigger tri_testafter insert or update or delete on testbeginif updating thendbms_output.put_line(修改);elsif deleting thendbms_output.put_line(删除);elsif inserting thendbms_output.put_line(插入);end if;end;2.2、行级触发器.(行级触发器对DML语句影响的每个行执行一次)实例一:-触发器-行级触发器create table test(sid number,sname varchar2(20);-创建一个表create sequence seq_test;-创建序列create or replace trigger tri_test-创建触发器before insert or update of sid on testfor each row-触发每一行beginif inserting thenselect seq_test.nextval into:new.sid from dual;elseraise_application_error(-20020,不允许更新ID值!);-中断程序end if;end;-测试,插入几条记
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二年级阅读理解质量检测试题1
- 柳州市人教版七年级上册地理期中试卷及答案复习试卷
- 人教小学三年级上册数学期末复习(附答案)
- 六年级下册期末数学综合测试真题经典
- 七年级下学期期末考试数学试题及解析
- 2025年死因监测培训考核试题及答案
- 建设工程质量安全监督人员考试题库含答案
- 出租汽车驾驶员从业资格考试区域科目题库及答案
- 网络安全工程师设备安全岗位面试问题及答案
- 中心静脉导管维护资质认证试题附答案
- 湖南安全员c3考试试题及答案
- 2025年中学生心理健康测试题及答案
- 二年级防溺水教案
- 后厨设备安全操作培训课件
- 好风起二部合唱简谱致远音乐
- 电子辅料基础知识培训
- Unit 2 Ways to go to school Part A Let's talk 英语教学课件
- 无人机使用课件
- 柔性装配基础知识培训课件
- 卫生检验副高评审个人汇报
- 2025年低压电工理论考试1000题(附答案)
评论
0/150
提交评论