触发器是当特定的SQL DML语句,如INSERT、UPDATE或DELETE语句在特定的数据库表上运行时,有数据库自动运行(自动激活)的过程,创建触发器的语法如下:
CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE | AFTER | INSTEAD OF} trigger_event ON table_name FOR EACH ROW[WHEN trigger_condition] BEGIN trigger_body END trigger_name;
OR REPLACE说明如果该触发器已经存在,则用新的触发器代替它,该选项可以用来修改一个现有触发器
trigger_name指定触发器名
BEFORE指定触发器在触发事件运行之前激活。AFTER指定触发器在触发事件运行之后激活。INSTEAD OF指定用触发器代替触发事件的运行
trigger_event指定激活触发器的事件
table_name指定触发器引用的表
FOR EACH ROW指定触发器是一个行级触发器,即当触发器激活时,trigger_body包含的代码会为每一行运行一次。如果忽略了FOR EACH ROW,则触发器是一个语句级触发器,即不管所作用的行有多少,当触发器激活时,trigger_body中包含的代码只运行一次
trigger_condition指定限制触发器实际运行的布尔条件
trigger_body中包含实现触发器功能的SQL和PL/SQL代码
下面的触发器将在emp2表的sal列发生变化时触发,
SET SERVEROUTPUT ON; CREATE OR REPLACE TRIGGER tri_update_emp2_sal BEFORE UPDATE OF sal ON emp2 FOR EACH ROW WHEN (new.sal != old.sal) BEGIN dbms_output.put_line('工资被更改'); END tri_update_emp2_sal; /
执行以下语句时将激活tri_update_emp2_sal触发器:
UPDATE emp2 SET sal = 1200 WHERE empno = '7369';
获取触发器的相关信息:
SELECT * FROM user_triggers WHERE trigger_name = 'TRI_UPDATE_EMP2_SAL';
禁用和启用触发器:
--禁用 ALTER TRIGGER tri_update_emp2_sal DISABLE; --启用 ALTER TRIGGER tri_update_emp2_sal ENABLE;
删除触发器:
DROP TRIGGER tri_update_emp2_sal;