精通Oracle数据库触发器类型(oracle触发器类型)
Oracle数据库的触发器类型已经得到广泛应用,用其触发实施事件,以达到自动化工作流程的目的,是开发人员的利器。本文将介绍 Oracle数据库 触发器的类型以及一些使用的特别示例。
Oracle数据库 触发器的类型主要有4种,分别是行触发器、语句触发器、系统触发器和DML触发器。
行触发器是在表行发生改变时(INSERT、UPDATE或DELETE)触发的触发器,只有一个BEFORE或AFTER参数,一般用于审计表的更新和维护相关表的表达式。例如,下面的代码定义了一个行触发器:
CREATE OR REPLACE TRIGGER emp_sal_update
BEFORE UPDATE OF salary ON emp
FOR EACH ROW BEGIN
INSERT INTO emp_sal_log(empid, old_salary,new_salary,changed_date) VALUES
(:OLD.empid, :OLD.salary, :NEW.salary, sysdate); END;
语句触发器和行触发器类似,但支持多列参数,且只允许BEFORE或AFTER参数,在数据库发生更新操作(INSERT、UPDATE、 DELETE)时,会执行一条触发器语句。它用于审计和维护表。例如,下面的代码定义了一个语句触发器:
CREATE OR REPLACE TRIGGER emp_sal_update
AFTER UPDATE OF salary, designationON emp
BEGIN INSERT INTO emp_sal_log(empid, old_salary,new_salary,old_desig,new_desig,changed_date)
VALUES (:OLD.empid, :OLD.salary, :NEW.salary, :OLD.desig, :NEW.desig, sysdate);
END;
系统触发器在Oracle数据库被重新加载或重启时被触发,用于处理并且维护表,以确保数据库的一致性和完整性。例如,下面的代码定义一个系统触发器:
CREATE OR REPLACE TRIGGER init_database
AFTER STARTUP ON DATABASE BEGIN
EXECUTE IMMEDIATE 'DROP TABLE tem;'; EXECUTE IMMEDIATE 'CREATE TABLE tem(name varchar2(30),age NUMBER(5));';
INSERT INTO tem VALUES('John', 25); END;
根据Oracle数据库文档,DML触发器是ORACLE数据库中另外一种触发器类型,它允许在某一表上添加多个BEFORE和AFTER参数。此外,它支持一种特殊类型的参数,即INSTEAD OF参数,允许在发生数据操作 后执行替代的行为。例如,下面的代码定义了一个DML触发器:
CREATE OR REPLACE TRIGGER emp_salary_check
BEFORE INSERT OR UPDATE OR DELETE ON emp
FOR EACH ROW BEGIN
IF :NEW.salary > 10000 THEN INSERT INTO emp_sal_log(empid, old_salary,new_salary, changed_date)
VALUES (:OLD.empid, :OLD.salary, :NEW.salary, sysdate);
END IF; END;
以上是精通Oracle数据库触发器类型的基础知识,行触发器和语句触发器一般用于审计更新,而系统触发器用于维护数据库,而DML触发器允许开发人员定制自定义的数据操作行为。随着Oracle数据库的不断升级,触发器类型也将不断完善。