Oracle触发器的类型及其应用(oracle触发器类型)
场景
触发器是Oracle的一种数据库对象,它随着DML语句(INSERT、UPDATE、DELETE)的执行而自动触发,它也可以捕获表中某些字段值的变化,响应该变化,用来自动实现数据完整性。Oracle提供了多种类型的触发器,如BEFORE 和AFTER触发器,其应用场景更为广泛,将有助于企业管理大型数据库。
Oracle的BEFORE触发器,用得最多的就是在针对特定表进行INSERT、UPDATE、DELETE操作之前,要对插入、更新、删除的数据作一定的前置检查。例如,在通过INSERT语句插入一行数据之前,检查插入的数据是否合法,例如我们可以检查被插入数据的特定字段的数据格式是否正确,满足特定要求。
下面情况是使用BEFORE 触发器的常见应用:
1、在插入或更新时禁止NULL值
例如:
CREATE OR REPLACE TRIGGER triggername
BEFORE INSERT OR UPDATE ON table_name
FOR EACH ROWBEGIN
IF :NEW.COLUMN_NAME IS NULL THEN RAISE_APPLICATION_ERROR(-20300, '不允许为空值!');
END IF;END;
2、在插入或更新时,保证唯一性
例如:
CREATE OR REPLACE TRIGGER triggername
BEFORE INSERT OR UPDATE ON table_name
FOR EACH ROWBEGIN
SELECT COUNT(*) INTO num FROM table_name
WHERE :NEW.col_name = col_name;
IF num > 0 THEN RAISE_APPLICATOIN_ERROR(-20301,'无效的数据!');
END IF;END;
AFTER触发器不像BEFORE触发器,它只能在操作发生后才执行,AFTER的触发器能够让我们能够访问到此次操作的所有影响行的数据,它也能够帮助我们实现一些复杂的业务需求。
下面是使用AFTER触发器常见应用:
1、针对某一列或行进行操作
例如:
CREATE OR REPLACE TRIGGER triggername
AFTER INSERT OR UPDATE OR DELETE ON table_name
FOR EACH ROWBEGIN
IF INSERTING THEN UPDATE table_name SET new_col = 'abc' WHERE col = :NEW.col;
END IF;END;
2、创建一个历史表
例如:
CREATE OR REPLACE TRIGGER triggername
AFTER INSERT OR UPDATE OR DELETE ON table_name
FOR EACH ROWBEGIN
IF INSERTING OR UPDATING THEN INSERT INTO history_table VALUES (:OLD.col1,:OLD.col2, ..., old_version);
END IF;END;
以上是Oracle触发器的简单介绍以及其相关应用场景,触发器可以帮助我们实现对数据的完整性控制,能够实现自动化管理,节省我们手动管理数据库中数据完整性的时间。