知识大全 Oracle触发器语法及实例

Posted 数据库

篇首语:互补的人容易一见钟情,相似的人适合一起变老。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle触发器语法及实例相关的知识,希望对你有一定的参考价值。

Oracle触发器语法及实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  一 Oracle触发器语法

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

  功能

   允许/限制对表的修改

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

   强制数据一致性

   提供审计和日志记录

   防止无效的事务处理

   启用复杂的业务逻辑

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

   触发器的语法

  CREATE [OR REPLACE] TIGGER触发器名 触发时间 触发事件

  ON表名

  [FOR EACH ROW]

  BEGIN

  pl/sql语句

  END

  其中

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

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

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

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

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

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

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

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

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

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

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

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

   举例

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

  create triggerauth_secure before insert or update or delete //对整表更新前触发

  on auths

  begin

  if(to_char(sysdate DY )= SUN

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

  end if;

  end

  例子

  CREATE OR REPLACE TRIGGER CRM T_SUB_USERINFO_AUR_NAME AFTER UPDATE OF STAFF_NAME

  ON CRM T_SUB_USERINFO

  REFERENCING OLD AS OLD NEW AS NEW

  FOR EACH ROW

  declare

  begin

  if :NEW STAFF_NAME!=:OLD STAFF_NAME then

  begin

  客户投诉

  update T_PLAINT_MANAGE set SERVE_NAME=:NEW STAFF_NAME where SERVE_SEED=:OLD SEED;

  客户关怀

  update T_CUSTOMER_CARE set EXECUTOR_NAME=:NEW STAFF_NAME where EXECUTOR_SEED=:OLD SEED;

  客户服务

  update T_CUSTOMER_SERVICE set EXECUTOR_NAME=:NEW STAFF_NAME

  where EXECUTOR_SEED=:OLD SEED;

  end;

  end if;

  end T_sub_userinfo_aur_name;

  /

  二

  开始

  create triggerbiufer_employees_department_id

  beforeinsertorupdateofdepartment_idonemployees

  referencingoldasold_value newasnew_value

  for each row

  when (new_value department_id<> )

  begin

  :mission_pct := ;

  end;

  /

   触发器的组成部分

   触发器名称

   触发语句

   触发器限制

   触发操作

   触发器名称

  create trigger biufer_employees_department_id

  命名习惯

  biufer(before insert update for each row)

  employees表名

  department_id列名

   触发语句

  比如

  表或视图上的DML语句

  DDL语句

  Oracle触发器语法(四)

  数据库关闭或启动 startup shutdown等等

  before insert or update

  of department_id

  on employees

  referencing old as old_value

  new as new_value

  for each row

  说明

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

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

   触发器限制

  when (new_value department_id<> )

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

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

   触发操作

  是触发器的主体

  begin

  :mission_pct := ;

  end;

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

  触发

  insert into employees(employee_id last_name first_name hire_date job_id email

  department_id salary mission_pct )

  values( Chen Donny sysdate );

  select mission_pct from employees where employee_id= ;

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

  数据库关闭或启动 startup shutdown等等

  before insert or update

  of department_id

  on employees

  referencing old as old_value

  new as new_value

  for each row

  说明

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

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

   触发器限制

  when (new_value department_id<> )

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

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

   触发操作

  是触发器的主体

  begin

  :mission_pct := ;

  end;

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

  触发

  insert into employees(employee_id last_name first_name hire_date job_id email

  department_id salary mission_pct )

  values( Chen Donny sysdate );

  select mission_pct from employees where employee_id= ;

cha138/Article/program/Oracle/201311/17146

相关参考