首页 > 数据库技术 > 详细

Oracle触发器

时间:2018-06-01 21:04:38      阅读:211      评论:0      收藏:0      [点我收藏+]

基本结构

create [or replace] tigger 触发器名 触发时间 触发事件
on 表名
[for each row]
when(condition)
begin
 pl/sql语句
end


触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。
触发时间:指明触发器何时执行,该值可取:

  • before:表示在数据库动作之前触发器执行;
  • after:表示在数据库动作之后触发器执行。

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

  • insert:数据库插入会触发此触发器;
  • update:数据库修改会触发此触发器;
  • delete:数据库删除会触发此触发器。

表 名:数据库触发器所在的表。
for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。

场景

/**********在触发器中阻止非法操作**********/
CREATE OR REPLACE TRIGGER "ABCDE" 
BEFORE INSERT OR DELETE OR UPDATE 
ON TABLE1 
FOR EACH ROW 
BEGIN
  IF(TO_CHAR(SYSDATE,DAY) IN (星期五,星期天)) THEN
    RAISE_APPLICATION_ERROR(-20001,不是上班时间,不能修改表格triggertest);
  END IF;
END;


/**********在触发器中操作新值和旧值**********/
CREATE OR REPLACE TRIGGER "ABCDE" 
BEFORE UPDATE 
ON TABLE1 
FOR EACH ROW 
DECLARE //注意声明变量
BEGIN
  :NEW.T_AGE := :NEW.T_AGE + :OLD.T_AGE;
END;

/**********对特定的行进行操作**********/
CREATE OR REPLACE TRIGGER "ABCDE" 
BEFORE DELETE
ON TABLE1 
FOR EACH ROW 
WHEN(OLD.T_AGE<17) //使用when设置过滤条件
BEGIN
  RAISE_APPLICATION_ERROR(-20001,他还是个未成年);
END;


/**********删除触发器**********/
drop trigger "ABCDE";

 

Oracle触发器

原文:https://www.cnblogs.com/chenss15060100790/p/9123357.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!