触发器

发布时间 2023-07-14 18:13:51作者: BBBone

Oracle触发器是在特定数据库事件发生时自动执行的过程。Oracle触发器可以在以下事件上定义:

  • INSERT:当向表中插入新记录时触发
  • UPDATE:当修改表中的记录时触发
  • DELETE:当从表中删除记录时触发

创建触发器的语法如下:

CREATE TRIGGER trigger_name 
{BEFORE | AFTER | INSTEAD OF} 
{INSERT | UPDATE | DELETE} 
ON table_name 
[FOR EACH ROW]
BEGIN
    -- 触发器体
END;
  • BEFORE:在事件发生前触发
  • AFTER:在事件发生后触发
  • INSTEAD OF:取代事件
  • FOR EACH ROW:针对每一行触发,否则仅在语句级触发一次

例如,创建一个在往employees表中插入数据前触发的触发器:

CREATE TRIGGER emp_salary_trigger
BEFORE INSERT ON employees
FOR EACH ROW 
BEGIN
    -- 校验工资必须大于0
    IF :NEW.salary <= 0 THEN
        RAISE_APPLICATION_ERROR(-20002, 'Salary must be positive');
    END IF;
END;

这个触发器会在插入新记录前校验salary字段的值必须大于0,否则抛出应用程序错误。

触发器可以用来实现类似于级联更新或者删除等操作。