zoukankan      html  css  js  c++  java
  • Oracle触发器

    基本结构

    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";
  • 相关阅读:
    CodeForces
    CodeForces
    CodeForces
    【模板】POJ-1511(dijkstra堆优化+链式前向星)
    【模板】POJ-1502(dijkstra)
    P2862 [USACO06JAN]Corral the Cows G
    P2495 [SDOI2011]消耗战
    CF613D Kingdom and its Cities
    P4655 [CEOI2017]Building Bridges
    P3917 异或序列
  • 原文地址:https://www.cnblogs.com/chenss15060100790/p/9123357.html
Copyright © 2011-2022 走看看