Oracle触发器:深入了解各类型(oracle触发器类型)
以及它们的构建
oracle触发器是一种用在oracle数据库中的程序,它允许用户在执行回调操作之前或者之后来响应某些时间事件,通常用来自动完成一些任务。考虑到oracle触发器有不同层次的灵活性和复杂性,更重要的是,充分了解触发器各类型以及构建它们的技术是非常重要的。
oracle触发器有四种类型:表级触发器 (table-level triggers),行级触发器 (row-level triggers),语句级触发器 (statement-level triggers) 和系统触发器 (system triggers)。表级触发器被定义在表上,用户可以通过该表层来响应数据库行为,它处理所有表中行发生操作之前和之后发生的活动,包括插入,更新和删除。例如,表级触发器可以检查插入、更新和删除操作,以确保从表中获得的数据的有效性和准确性。其格式如下:
CREATE [OR REPLACE] TRIGGER trigger_name
BEFORE | AFTER
ON table_name
FOR EACH ROW
[WHEN (condition)]
BEGIN
statement;
END;
行级触发器比表级触发器更复杂,它也是定义在表上的,但只在每行更新或删除时触发。它可以进行更细微的检查,像更新前后某一行属性的值,它可以检查只针对具体行插入和删除数据库属性的值是否有效。它的格式如下:
CREATE [OR REPLACE] TRIGGER trigger_name
BEFORE | AFTER
ON table_name
FOR EACH ROW
[WHEN (condition)]
BEGIN
statement;
END;
语句级触发器是定义在表上的,当表的数据发生变化时触发,但无法检测数据库行为,只能检测表中执行任何DML状态,这意味着每个操作都会触发语句级触发器,即使失败也会发生。它的构建格式如下:
CREATE [OR REPLACE] TRIGGER trigger_name
BEFORE | AFTER
INSERT | UPDATE | DELETE OR TRUNCATE
ON table_name
[WHEN (condition)]
BEGIN
statement;
END;
最后,系统触发器是定义在数据库实例上的,它们用于捕获和随时时间相关的事件(如登录/注销,集群环境中单实例状态和重新启动),它们更像定期执行的存储过程,而不是DML活动的响应者。系统触发器有一个特别的格式,如下:
CREATE [OR REPLACE] TRIGGER trigger_name
[BEFORE | AFTER]
LOGON | LOGOFF | SERVERERROR | STARTUP | SHUTDOWN
[WHEN (condition)]
BEGIN
statement;
END;
因此,oracle触发器的各种类型的变化迅速和丰富,oracle触发器有4种不同的类型:表级触发器,行级触发器,语句级触发器和系统触发器,用户必须充分了解构造各种类型oracle触发器所需的不同语句以及其背后的技术。