Oracle触发器:掌握不同的类型(oracle触发器类型)

Oracle Trigger是Oracle数据库提供的一种特殊的类型,可以在用户执行DML操作时自动执行指定的操作。它是一种比较复杂的数据库功能,可以将用户操作执行方式进行改变。通过触发器,可以加强数据库安全,同时可以增加对数据变化的审计。Oracle提供了四种不同类型的触发器,它们分别可以在数据库的DDL语句和DML语句的执行上有不同的作用。下面分别介绍它们的用法:

1. DDL触发器:这种触发器可以在执行DDL语句时触发,它可以在操作实施前或者操作实施后更改数据库对象。例如,可以利用这种触发器监测表结构变化,或是做出某种特定的操作。下面是一个示例:

“`sql

create or replace trigger alter_table_no_action

before alter on database –设定应用范围

begin

if sys_context(‘USERENV’,’CLIENT_INFO’) != ” then

raise_application_error(-20001, ‘未授权操作’);

end if;

end;

/


2. DML触发器:这种触发器可以在执行DML语句时触发,可以改变用户对表的操作,比如提高某种操作的安全性,做一些特定的事情,等等。比如,当用户更新数据表时,可以利用触发器使更新操作安全可靠,使用户不能更新时间超过当前时间的记录:

```sql
CREATE OR REPLACE TRIGGER test_trig
BEFORE UPDATE ON test_table
FOR EACH ROW
BEGIN
IF :NEW.time
RAISE_APPLICATION_ERROR(-20001,'can not update a record before now');
END IF;
END;
/

3. INSTEAD OF触发器:INSTEAD OF触发器可以实现对View、Function、Package和类型方法的控制,可以实现特定的数据校验,以及处理DDL语句的功能。它在执行DML语句时,可以将用户的DML操作转换为来自系统的约束和视图,而视图或存储过程则运行用户自定义的SQL语句。例如,使用INSTEAD OF触发器可以处理用户对视图的操作,表现形式如下:

“`sql

CREATE OR REPLACE TRIGGER my_view_trig

INSTEAD OF DELETE ON my_view

FOR EACH ROW

BEGIN

DELETE FROM my_table (id)

WHERE id = :old.id;

END;

/


4. AFTER触发器:可以在数据库执行DML操作时,即在这些操作完成后立即触发,执行指定的动作。它通常可以完成一些审计的功能,例如对表的更改进行记录,或在操作完成后完成一些特定的操作。例如,在用户插入一条数据后立即将该条数据进行备份,可以使用AFTER触发器来实现:

```sql
CREATE OR REPLACE TRIGGER TEST_TRIG
AFTER INSERT ON test_table
FOR EACH ROW
BEGIN
INSERT INTO test_table_backup VALUES (:new.value1,:new.value2);
END;
/

总之,Oracle触发器提供了一种安全可靠,灵活精准的手段,可以实现对用户操作的控制,以实现特定的功能。正确使用触发器,可以明显提升数据库的安全水平和性能。


数据运维技术 » Oracle触发器:掌握不同的类型(oracle触发器类型)