码迷,mamicode.com
首页 > 数据库 > 详细

Oracle触发器

时间:2018-06-01 21:11:14      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:cat   The   行操作   数据库修改   这一   数据   设置   插入   nbsp   

基本结构

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触发器

标签:cat   The   行操作   数据库修改   这一   数据   设置   插入   nbsp   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!