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 != 'xxxx' 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 != 'xxx' 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作为数据库的理由之一。
标签:触发器,数据库,操作,存储过程,它可以