Oracle 触发器的分类研究(oracle触发器类型)

Oracle 数据库的触发器是用于自动执行SQL语句的,它可以在发生特定的数据库变动时被触发并执行指定的SQL语句。触发器可以帮助用户构建一个数据稳定、可靠、具有相应动作及安全层的数据库系统。Oracle 数据库触发器可以分为如下三类:

一、表级触发器:表级触发器仅仅针对一个表关联操作,比如:插入、更新、删除等操作。使用表级触发器时,必须关联指定表,一旦被触发,触发器可以借助触发器变量来访问被触发表的内容和字段,从而可以对表字段及内容做相应的处理。

例如:每当执行insert操作的时候,创建一个表级触发器,在插入记录之前,需要根据条件来检查是否满足要求:

CREATE OR REPLACE TRIGGER my_insert_trigger 
BEFORE INSERT
ON my_table FOR EACH ROW
DECLARE
BEGIN
-- check some conditions
IF :NEW.val != 'x' THEN
-- raise an exception
RAISE_APPLICATION_ERROR(-20001, 'Error Message');
END IF;
END;

二、存储过程触发器:存储过程触发器与表级触发器有相同的操作及支持,但是支持不同的表及不同的PL/SQL块,存储过程触发器能够调用多个数据库表,可以在行级和表级触发器之外运行的复杂的PL/SQL块来处理数据,进行跨表,跨层级操作。

例如:检查被插入记录是否为特定值:

CREATE OR REPLACE PROCEDURE check_test 
(source_val IN VARCHAR2)
IS
BEGIN
IF source_val != '' THEN
RAISE_APPLICATION_ERROR(-20001, 'Error Message');
END IF;
END;
CREATE OR REPLACE TRIGGER my_proc_trigger 
BEFORE INSERT
ON my_table FOR EACH ROW
BEGIN
call check_test(:NEW.val);
END;

三、数据库触发器:数据库触发器是用于特定的操作,比如DML操作和DDL操作,该触发器通常被称为数据库操作触发器,它可以为数据库的每一个操作进行触发,包括建表、插入记录、更新记录、删除记录、创建新用户等等。

例如:禁止创建table类型的表:

CREATE OR REPLACE TRIGGER my_db_trigger 
BEFORE CREATE ON DATABASE
DECLARE
object_type VARCHAR2(20);
object_name VARCHAR2(50);
BEGIN
SELECT object_type ,object_name INTO object_type, object_name
FROM user_objects
WHERE object_name = 'new_table';
IF object_type = 'TABLE' THEN
RAISE_APPLICATION_ERROR(-20001, 'Error Message');
END IF;
END;

总结:Oracle 数据库中的触发器可以分为表级触发器、存储过程触发器和数据库触发器,它们可以帮助用户构建一个稳定、可靠、具有安全层的数据库系统,这是Oracle数据库的优势之一,也是大家选择Oracle作为数据库的理由之一。


数据运维技术 » Oracle 触发器的分类研究(oracle触发器类型)