Oracle数据库中触发器类型分析(oracle触发器类型)

Oracle是一种大型数据库管理系统,它中的触发器类型分为以下几种:

1)行触发器:行触发器是与表的每一行关联的,它们只在做一定更新操作时触发,即发生写操作时触发。应当注意,行触发器会更新表的每一行,也就是如果有2条数据的更新操作发生的时候,行触发器会触发2次。语法举例如下:

CREATE OR REPLACE TRIGGER account_change

AFTER UPDATE ON account

FOR EACH ROW

BEGIN

INSERT INTO account_change_log

(log_date, account_number, change_action)

VALUES (SYSDATE, :new.account_number, ‘UPDATE’);

END;

/

2)语句触发器:语句触发器是以整个SQL语句为单位来触发,用来检查或更新整个表,它主要分为INSTEAD OF,AFTER,BEFORE和DECLARE共4种。INSTEAD OF的触发器在对被触发的视图执行操作之前就会触发,AFTER的触发器顾名思义,在被触发是操作之后才被触发执行;BEFORE的触发器则在被触发表操作之前被触发;DECLARE触发器则在游标操作之前被触发,下面给出一个例子:

CREATE OR REPLACE TRIGGER student_update_trigger

BEFORE UPDATE ON student

FOR EACH ROW

DECLARE

l_up_date student.up_date%TYPE;

BEGIN

SELECT up_date

INTO l_up_date

FROM student

WHERE student_id = :new.student_id;

IF l_up_date > SYSDATE THEN

RAISE_APPLICATION_ERROR(-20001, ‘Error! Can not change the up_date!’);

END IF;

END;

/

3)系统触发器:系统触发器是当某个全局的操作发生时,执行相关操作,在Oracle中有据表创建,据表删除等系统触发器,它们的语法如下:

CREATE OR REPLACE TRIGGER system_table_creating

AFTER CREATE ON SCHEMA

DECLARE

l_table_name VARCHAR2(50);

BEGIN

SELECT table_name INTO l_table_name FROM user_tables;

IF l_table_name = ‘table_name’ THEN

EXECUTE IMMEDIATE ‘CREATE INDEX table_index on table_name(column_name)’;

END IF;

END;

/

总结:在Oracle中,触发器类型分为行触发器、语句触发器和系统触发器,其中每一种触发器有不同的用途,必须正确地使用不同类型的触发器,才能使得系统更加高效。


数据运维技术 » Oracle数据库中触发器类型分析(oracle触发器类型)