触发器

来源:互联网 发布:运城淘宝店长招聘网 编辑:程序博客网 时间:2024/06/06 12:51

DML 触发器:


对表执行Insert、Update、Delete操作时激发
可以用于执行校验、设置初使值、审核改变、甚至禁止某种DML操作
语法:
CREATE OR REPLACE TRIGGER 触发器名称
{AFTER|BEFORE } -- 指定触发时机
{INSERT OR DELETE OR UPDATE} -- 指定触发器事件
ON 表名 --指定所监控的表
{FOR EACH ROW|FOR EACH STATEMENT} -- 指定触发器次数
BEGIN
--代码;
END;

相关概念:
AFTER|BEFORE:在什么事件之前或之后执行
INSERT|DELETE|UPDATE:什么事件
ON 表名:触发器建在什么表上,即监控什么表
FOR EACH ROW:行级触发,示例:delete from t1,删除1000行,则执行1000次(一行一次)
FOR EACH STATEMENT:语句级触发,示例: delete from t1,删除1000行,则执行1次(一句一次)
:new 行变量:保存事件发生时新数据所在行,只有insert事件和update事件才有新数据
:old 行变量:保存事件发生时旧数据所在行,只有delete事件和update事件才有旧数据


 判断发生的是什么触发事件:

 inserting表示插入事件,

 updating表示更新事件,

 deleting表示删除事件。

 

create or replace trigger trig_emp2   after insert or delete or update of sal,ename on emp2   --行级触发,每一行有相应的事件发生时,都会触发begin里面的方法体   for each rowbegin      if inserting then           dbms_output.put_line('插入数据了');           dbms_output.put_line('插入的员工姓名是:'|| :new.ename || '  员工月薪是:'|| :new.sal);      elsif updating  then            dbms_output.put_line('更新数据了,有人涨工资咯');      elsif deleting then            dbms_output.put_line('删除数据了');      end if;end;


我们如果想更新指定字段时,才触发事件,可以使用 update of 字段名,就像上面的update of sal 一样。