深入理解oracle触发器的类型(oracle触发器类型)

Oracle触发器(Trigger)是Oracle中强大的一种功能,可以定义执行特定操作或动作的数据库对象。它可以实现在Oracle表或视图中操作后,自动触发更新表或视图,或执行指定任务,如插入特定文本、发送电子邮件和调用存储过程等。

Oracle触发器可以分为三种类型:行触发器、事件触发器和DML触发器。

(1)行触发器:行触发器的操作是在表中的每一行上发生的,它主要用于更新行或改变表中列的属性。它允许使用像update之类的语句对表行进行编辑,而不会影响其它行。如下所示:

“`sql

CREATE OR REPLACE TRIGGER updTrigger

BEFORE UPDATE OF salary ON emp

FOR EACH ROW

BEGIN

IF (:NEW.salary > 3000) THEN

RAISE_APPLICATION_ERROR(-20001, ‘salary is not allowed to be over 3000 ’);

END IF;

END;

/


(2)事件触发器:事件触发器是在执行 DDL/DML 操作之前或之后执行,通过它来实现自动更新表或视图,或执行特定任务。如下所示:

```sql
CREATE OR REPLACE TRIGGER loggingTrigger
AFTER INSERT OR UPDATE OR DELETE
ON emp
BEGIN
INSERT INTO emp_log
(operation, empno, title, salary, hiredate)
VALUES
(:old.hiredate, :new.title, :new.salary, SYSDATE);
END;
/

(3)DML触发器:DML触发器是在SQL 操作的前面或后面触发的,主要用于审核,加载或通过调用现有的存储过程来实现锁定、编码和加密功能。如下所示:

“`sql

CREATE OR REPLACE TRIGGER loadTrigger

AFTER INSERT ON table

FOR EACH ROW

DECLARE

new_row recTable%rowtype;

BEGIN

–select record from T_table

SELECT * INTO new_row FROM t_table WHERE id = :NEW.id;

–Check someting

IF new_row.name != :NEW.name THEN

RAISE_APPLICATION_ERROR(-20001, ‘data does not exists’);

END IF;

END;

/


总体上,定义Oracle触发器的过程比较复杂,但可以在复杂的数据库环境中实现自动执行特定任务,减少管理和维护的工作量,提高了数据库系统的运行性能和稳定性。

数据运维技术 » 深入理解oracle触发器的类型(oracle触发器类型)