Oracle数据库触发器类型深度解析(oracle触发器类型)
Oracle数据库触发器是为了处理表或表之间的数据关系,它们可以执行许多SQL任务。在Oracle中,触发器可分为三种类型:行触发器,表触发器和系统触发器。
#### 1 行触发器
行触发器只有当表中的行修改或新增时,才会激活。它是数据库限制,检查,验证和操作的有效工具。它们的作用范围限于当表行被更改或插入时执行的代码。对于行触发器,有三种不同的类型:before行触发器,after行触发器和instead of行触发器。以下是使用这三种行触发器的代码片段:
-- BEFORE/AFTER行触发器
CREATE OR REPLACE TRIGGER "bi_emp" BEFORE INSERT OR UPDATE ON emp
FOR EACH ROWDECLARE
-- trigger declarationBEGIN
-- trigger bodyEND bi_emp;
-- INSTEAD OF行触发器
CREATE OR REPLACE TRIGGER "bi_emp" INSTEAD OF INSERT OR UPDATE ON emp
FOR EACH ROWDECLARE
-- trigger declarationBEGIN
-- trigger bodyEND bi_emp;
行触发器可以执行一堆任务,如检查参数,引用表和过程等。它们还允许用户在修改或添加表时,使用现有的行来执行其他事件。
#### 2 表触发器
表触发器和行触发器类似,只有在表被更新,删除或插入时才会激活。它们可以看作以前触发器的一种扩展,可以访问每一行,以确保此活动满足其目的。它允许用户更新,删除或插入行。可以使用以下代码来创建表触发器:
CREATE OR REPLACE TRIGGER "bi_emp"
BEFORE INSERT OR UPDATE OR DELETE ON emp FOR EACH ROW
DECLARE -- trigger declaration
BEGIN -- trigger body
END bi_emp;
表触发器总是当表被更改时触发,不管该表的每一行是否被更改。它们可以使用UPDATE OF列名限定关键字,限定发生更改的列。
#### 3 系统触发器
系统触发器由Oracle在特定数据库事件发生时执行。它们以内部可以激活的形式管理数据库,而不必担心应用程序触发器。只有当数据库管理员激活时,系统触发器才会被执行。无论是调用存储过程,还是执行SQL脚本,都可以包含在系统触发器中。
下面的代码使用DBMS_JOB来创建系统触发器:
declare
jobno number; begin
dbms_job.submit( jobno, 'begin
--Your Procedure/Script end;',
sysdate, 'sysdate+7');
commit;end;
Oracle数据库触发器提供了一种灵活的机制,可以控制表和表之间的数据关系,而无需修改应用程序。它们可以在新增,删除,更新和其他数据库事件发生时执行,可以让管理员和用户更好地管理数据库。