当前位置:首页 > TAG信息列表 > 触发器实例介绍

触发器实例介绍

创建一个触发器 Oracle触发器语法及实例

oracle触发器语法及实例  

  一oracle触发器语法

  触发器是特定事件出现的时候自动执行的代码块类似于存储过程触发器与存储过程的区别在于:存储过程是由用户或应用程序显式调用的而触发器是不能被直接调用的

创建一个触发器 Oracle触发器语法及实例

  功能

  允许/限制对表的修改

  自动生成派生列比如自增字段

  强制数据一致性

  提供审计和日志记录

  防止无效的事务处理

  启用复杂的业务逻辑

  触发器触发时间有两种after和before

  触发器的语法

  create[orreplace]tigger触发器名触发时间触发事件

  on表名

  [foreachrow]

  begin

  pl/sql语句

  end

  其中

  触发器名触发器对象的名称

  由于触发器是数据库自动执行的因此该名称只是一个名称没有实质的用途

  触发时间指明触发器何时执行该值可取

  before—表示在数据库动作之前触发器执行;

  after—表示在数据库动作之后出发器执行

  触发事件指明哪些数据库动作会触发此触发器

  insert数据库插入会触发此触发器;

  oracle触发器语法(二)oracle触发器详解

  update数据库修改会触发此触发器;

  delete数据库删除会触发此触发器

  表名数据库触发器所在的表

  foreachrow对表的每一行触发器执行一次如果没有这一选项则只对整个表执行一次

  举例

  下面的触发器在更新表auths之前触发目的是不允许在周末修改表

  createtriggerauth_securebeforeinsertorupdateordelete//对整表更新前触发

  onauths

  begin

  if(to_char(sysdatedy)=sun

  raise_application_error(不能在周末修改表auths);

  endif;

  end

  例子

  createorreplacetriggercrmt_sub_userinfo_aur_nameafterupdateofstaff_name

  oncrmt_sub_userinfo

  referencingoldasoldnewasnew

  foreachrow

  declare

  begin

  if:newstaff_name!=:oldstaff_namethen

  begin

  客户投诉

  updatet_plaint_managesetserve_name=:newstaff_namewhereserve_seed=:oldseed;


  客户关怀

  updatet_customer_caresetexecutor_name=:newstaff_namewhereexecutor_seed=:oldseed;

  客户服务

  updatet_customer_servicesetexecutor_name=:newstaff_name

  whereexecutor_seed=:oldseed;

  end;

  endif;

  endt_sub_userinfo_aur_name;

  /

  二

  开始

  createtriggerbiufer_employees_department_id

  beforeinsertorupdateofdepartment_idonemployees

  referencingoldasold_valuenewasnew_value

  foreachrow

  when(new_valuedepartment_id<>)

  begin

  :mission_pct:=;

  end;

  /

  触发器的组成部分

  触发器名称

  触发语句

  触发器限制

  触发操作

  触发器名称

  createtriggerbiufer_employees_department_id

  命名习惯

  biufer(beforeinsertupdateforeachrow)

  employees表名

  department_id列名

  触发语句

  比如

  表或视图上的dml语句

  ddl语句

  oracle触发器语法(四)

  数据库关闭或启动startupshutdown等等

  beforeinsertorupdate

  ofdepartment_id

  onemployees

  referencingoldasold_value

  newasnew_value

  foreachrow

  说明

  无论是否规定了department_id对employees表进行insert的时候

  对employees表的department_id列进行update的时候

  触发器限制

  when(new_valuedepartment_id<>)

  限制不是必须的此例表示如果列department_id不等于的时候触发器就会执行

  其中的new_value是代表更新之后的值

  触发操作

  是触发器的主体

  begin

  :mission_pct:=;

  end;

  主体很简单就是将更新后的mission_pct列置为

  触发

  insertintoemployees(employee_idlast_namefirst_namehire_datejob_idemail

  department_idsalarymission_pct)

  values(chendonnysysdate);

  selectmission_pctfromemployeeswhereemployee_id=;

  触发器不会通知用户便改变了用户的输入值oracle触发器语法(四)

  数据库关闭或启动startupshutdown等等

  beforeinsertorupdate

  ofdepartment_id

  onemployees

  referencingoldasold_value

  newasnew_value

  foreachrow

  说明

  无论是否规定了department_id对employees表进行insert的时候

  对employees表的department_id列进行update的时候

  触发器限制

  when(new_valuedepartment_id<>)

  限制不是必须的此例表示如果列department_id不等于的时候触发器就会执行

  其中的new_value是代表更新之后的值

  触发操作

  是触发器的主体

  begin

  :mission_pct:=;

  end;

  主体很简单就是将更新后的mission_pct列置为

  触发

  insertintoemployees(employee_idlast_namefirst_namehire_datejob_idemail

  department_idsalarymission_pct)

  values(chendonnysysdate);

  selectmission_pctfromemployeeswhereemployee_id=;

lishixinzhi/article/program/oracle/201311/17146
黑龙江自考之家 微奇网

  • 关注微信关注微信

猜你喜欢

微信公众号