掌握Oracle触发器的类型及使用(oracle触发器类型)
Oracle 触发器是用于数据库表上的存储过程、通知事件或状态变化时自动执行的特殊类型的存储过程,一般可以用来防止数据库表的操作,如更新、插入或删除,从而确保数据库的完整性和一致性。 有三种Oracle触发器:DML(数据操作语言)、DDL(数据定义语言)和数据库事件触发器。
第一个是DML(数据操作语言)触发器,也称为行级触发器,用于在表上执行的插入、更新或删除操作发生时自动执行指定的SQL语句,根据表发生的变化自动触发一些行为。一般来说,它们会在SQL语句执行时被调用,也可以使用BEFORE或AFTER子句来决定在何时以及发生哪种事件时触发触发器。 例如,下面的示例创建一个DML触发器
CREATE OR REPLACE TRIGGER trg_emp_salary
BEFORE UPDATE ON emp FOR EACH ROW
BEGIN IF :new.salary
raise_application_error ( -20001,
'Salary must be greater than or equal to 5000'); END IF;
END;/
第二种是DDL(数据定义语言)触发器,用于在执行DDL语句,如CREATE、DROP或ALTER等对对象进行管理时自动执行相应的SQL语句。 DDL触发器的一个常见用途是自动记录对表的任何更改,例如创建、删除或更改表结构。 例如,下面的示例创建一个DDL触发器:
CREATE OR REPLACE TRIGGER trg_emp_ddl
BEFORE CREATE OR ALTER ON emp BEGIN
INSERT INTO audit_log VALUES ('Emp Table changed at ' || SYSDATE);
END;/
最后一种是数据库事件触发器,一般用于在系统内发生特定事件时自动触发一些行为。这些事件包括客户端操作、数据库备份、数据库实例启动/关闭等等。例如,下面的示例创建一个数据库事件触发器:
CREATE OR REPLACE TRIGGER trg_db_startup
ON DATABASE AFTER STARTUP
BEGIN EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT="yyyy/mm/dd hh24:mi:ss"'
END;/
总之,Oracle触发器简化了数据库表上出现的DML、DDL操作事件以及数据库自身事件时自动执行SQL语句和PL/SQL块的过程。这有助于更好地管理和保护数据库完整性和一致性,从而更好地支持应用的正确运行。