Oracle 触发器语法及实例(一)

上门亲

上门亲

2016-02-19 18:31

今天图老师小编给大家精心推荐个Oracle 触发器语法及实例(一)教程,一起来看看过程究竟如何进行吧!喜欢还请点个赞哦~

  一 Oracle触发器语法

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

  功能:

  1、 允许/限制对表的修改

  2、 自动生成派生列,比如自增字段

  3、 强制数据一致性

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  4、 提供审计和日志记录

  5、 防止无效的事务处理

  6、 启用复杂的业务逻辑

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

  1、触发器的语法:

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

  ON表名

  [FOR EACH ROW]

  BEGIN

  pl/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_value.commission_pct:=0;
  end;
  /

  1、触发器的组成部分:

  1、 触发器名称

  2、 触发语句

  3、 触发器限制

  4、 触发操作

  1.1、触发器名称

   createtriggerbiufer_employees_department_id

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  命名习惯:  

   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_value.commission_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,‘donny@hotmail.com’,60,10000,.25);
  selectcommission_pctfromemployeeswhereemployee_id=12345;

  触发器不会通知用户,便改变了用户的输入值。

展开更多 50%)
分享

猜你喜欢

Oracle 触发器语法及实例(一)

编程语言 网络编程
Oracle 触发器语法及实例(一)

Oracle 触发器语法及实例(二)

编程语言 网络编程
Oracle 触发器语法及实例(二)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

oracle 触发器 学习笔记

编程语言 网络编程
oracle 触发器 学习笔记

Oracle 触发器的使用小结

编程语言 网络编程
Oracle 触发器的使用小结

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

MySQL 5.0 触发器

MySQL mysql数据库
MySQL 5.0 触发器

SQLCLR(三)触发器

编程语言 网络编程
SQLCLR(三)触发器

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Win7家长帐户的启用方法

Win7家长帐户的启用方法

Oracle数据库10g:数据仓储前10位的新特征(一)

Oracle数据库10g:数据仓储前10位的新特征(一)
下拉加载更多内容 ↓