触发器

来源:互联网 发布:java下载图片怎么过滤 编辑:程序博客网 时间:2024/06/08 20:03

  触发器:隐式执行的存储过程,事件发生时候自动发生。
  用途:当表数据发生改变时,用来校验表。
        根据数据库发生的事件来完成维护工作。
   分类:dml触发(必须掌握):监控表
  dml触发器:定义语法
    create or replace trigger 触发器名称
    after|before 触发时间
    insert |update|delete 触发事件类型。可以写多个类型  比如 update or delete
    on 表 (作用于哪个表)
    for each row (针对执行语句的每行) | for each statment (针对每条执行语句,不写则默认为该种方式)
    declare 定义变量--可写可不写,不是必须的
    begin
      触发执行语句;
      (--可以写条件位句,不是必须的
      -- update-updating ,delete-deleting ,insert-inserting
      if updating then
        --如果是更新语句,则执行if条件里面的语句
      end if;
      )
    end;
    删除触发器:drop trigger 触发器名称
    --例子   
    --基本创建例子
    CREATE OR REPLACE TRIGGER t_emp
    BEFORE UPDATE ON myemp FOR EACH ROW
    BEGIN
      dbms_output.put_line('myemp中的数据被修改了');
    END;
    /
    --可以指定列创建触发器,只有该列被修改了才触发
    CREATE OR REPLACE TRIGGER t_emp
    BEFORE UPDATE OF comm ON myemp FOR EACH ROW
    BEGIN
      dbms_output.put_line('myemp中的comm被修改了');
    END;
    /
   --通过触发器设置id自动递增
   CREATE SEQUENCE se ;--创建序列
   CREATE TABLE tb_test(t_id INTEGER ,t_name VARCHAR2(20));
   CREATE OR REPLACE TRIGGER t_inc--创建一个触发器,
      BEFORE INSERT ON tb_test FOR EACH ROW
      BEGIN
        SELECT se.nextval INTO :new.t_id FROM dual;
      --:new.t_id := se.nextval;
      END;
      /
  
    :new 和 :old  表示执行语句的每一条数据(只针对行级触发器)
    :new 针对insert和update有效,表示执行过后新的数据
    :old 针对delete和update有效,表示执行之前的数据
    用法
     :new.列名
     :old.列名