深入了解Oracle数据库触发器类型(oracle触发器类型)

Oracle数据库触发器是一种特殊的存储机制,它是自动执行某个SQL语句,以响应特定事件允许的特殊概念。Oracle数据库触发器类型可以分为Check Constraint Trigger、Default Value Trigger、Logon Trigger、Row Level Trigger和System Level Trigger。

Check Constraint Trigger是在数据库定义了Check Constraint时,其触发器被自动激活,而且在INSERT或UPDATE语句中执行。Check Constraint Trigger的典型应用在自动更新表数据,以确保数据的完整性和一致性,如下面的示例代码:

CREATE OR REPLACE TRIGGER salary_check

BEFORE INSERT OR UPDATE OF salary

ON employee

FOR EACH ROW

BEGIN

IF (:new.salary > 10000) THEN

RAISE_APPLICATION_ERROR(-20001,’salary must

END IF;

END;

Default Value Trigger是在INSERT或UPDATE语句发出时被触发。它的作用是,当定义表的列没有通过INSERT或UPDATE语句提供一个有效的值时,Default Value Trigger会替代替的默认值。如下面的代码:

CREATE OR REPLACE TRIGGER salary_default

BEFORE INSERT OR UPDATE OF salary

ON employee

FOR EACH ROW

BEGIN

IF ( :new.salary is null) THEN

:new.salary := 1000;

END IF;

END;

Logon Trigger是每当用户登录数据库的时候触发,以便执行安全性检查,以及确定是否应该调用数据库方法,以及限制对对象的访问。如下面例子:

CREATE OR REPLACE TRIGGER Logon_Trig

AFTER LOGON ON SCHEMA

BEGIN

IF USER = ‘HR’ THEN

EXECUTE IMMEDIATE ‘ALTER SESSION SET CURRENT_SCHEMA = HR’;

END IF;

END;

Row Level Trigger是在表上有插入,更新或者删除操作发生时来触发,也就是当INSERT,UPDATE或DELETE语句发出时被触发,它会将变化量传递给一个程序或函数,以执行额外操作。如下面的例子:

CREATE OR REPLACE TRIGGER update_salary

BEFORE UPDATE OF salary

ON employee

FOR EACH ROW

BEGIN

IF :old.salary != :new.salary THEN

UPDATE department set total_salary=total_salary+:new.salary-:old.salary;

END IF;

END;

System Level Trigger是每次对系统对象发出DDL(数据定义语言)语句时,会触发System Level Trigger,用于定义安全性,跟踪操作,或者增强元数据的存储。一个典型的System Level Trigger如下:

CREATE OR REPLACE TRIGGER system_trig

AFTER CREATE ON DATABASE

BEGIN

INSERT INTO log_table (ddl_sql, createtime) VALUES (ORA_DICT_OBJ_OWNER || ‘.’ ||

ORA_DICT_OBJ_NAME, SYSDATE);

END;

从上面可以看出,Oracle数据库触发器分为Check Constraint Trigger、Default Value Trigger、Logon Trigger、Row Level Trigger和System Level Trigger,用于自动执行某些SQL语句,实现数据的安全性、完整性和一致性的要求。因此,使用Oracle数据库触发器能够让系统更高效,更安全,也更易于维护。


数据运维技术 » 深入了解Oracle数据库触发器类型(oracle触发器类型)