深入了解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数据库触发器能够让系统更高效,更安全,也更易于维护。