Oracle触发器是一种数据库对象,它主要用于在某些特定条件下应用自定义行为。 Oracle有许多不同类型的触发器,现在主要关注四种。
第一种是表触发器,它位于表上,主要是响应表上的特定操作,例如:UPDATE、INSERT和DELETE。 以下是一个表触发器的例子,它在C_EMPLOYEES表上插入新行时将追加新行时间戳:
CREATE OR REPLACE TRIGGER logging_employees_trigger
BEFORE INSERT ON c_employees
FOR EACH ROW
BEGIN
:new.create_date := SYSDATE;
END;
/
第二种是Row Level触发器,它将应用于表中的每一行, 以下代码实例将记录每次更新C_EMPLOYEES表时间戳:
CREATE OR REPLACE TRIGGER logging_employees_row_trigger
BEFORE UPDATE OF id ON c_employees
FOR EACH ROW
BEGIN
:new.update_date := SYSDATE;
END;
/
第三种是Statement Level触发器,它将应用于表的每一个操作语句, 以下代码实例将记录每次更新C_EMPLOYEES表的时间戳:
CREATE OR REPLACE TRIGGER logging_employees_statement_trigger
BEFORE UPDATE ON c_employees
BEGIN
INSERT INTO logging_table (table_name, update_date)
VALUES (‘c_employees’, SYSDATE);
END;
/
最后是System Level触发器,它是用于管理数据库的级别的触发器。 该触发器是一次性的,只有当数据库重新启动或升级时才会触发指定的行为,例如以下代码将在数据库启动时在c_employees表插入一行:
CREATE OR REPLACE TRIGGER logging_employees_system_trigger
AFTER STARTUP ON database
BEGIN
INSERT INTO c_employees VALUES (1000, ‘Database’, ‘Startup’, SYSDATE);
END;
/
从现在开始,当数据库启动时,这条记录将被Oracle触发器自动插入到c_employees表中。
Oracle触发器有助于让应用程序更自动化,在合理的情况下可以显著提高数据安全性和一致性。 在应用程序的设计中,遵循的触发器的有效使用可以显著提升性能和可读性。