精通 Oracle 触发器: 分类详解(oracle触发器类型)
Oracle 触发器是一种用于响应用户数据库行为的特殊类型的存储过程,允许用户针对特定数据库义务执行特定动作,如某一表上执行 insert,update或者 delete 语句等。触发器用于在安全和可靠地提供高级数据库服务方面非常重要,通常它使用视图和事件来实现一种自定义的数据库解决方案。下面来简要分析 Oracle 触发器的几种类型及其主要功能:
1、引用级触发器
引用级触发器可以像其他数据库触发器一样作为业务逻辑的一种表示,它将发射器的任务执行流程引用到当前数据库表上,使得数据库表行为不再受制于 SQL 语句,而是由此创建一个可独立执行的任务流程,实现用户指定的动作和操作。引用级触发器可以用下面的代码Syntax创建:
CREATE [ OR REPLACE ] TRIGGER trigger_name
{ BEFORE | AFTER | INSTEAD OF }
{ INSERT [ OR ] | UPDATE [ OR ] | DELETE }
[ OF col_name [, col_name ] … ]
ON table_name
[ REFERENCING { OLD [ AS ] o_alias | NEW [ AS ] n_alias | BOTH [AS] b_alias } ]
[ FOR EACH ROW ]
[ WHEN ( condition ) ]
pl/sql_block
2、级联触发器
级联触发器可以用来指定数据库表中某一行或者多行发生变动时,触发定义的另一个触发器和 SQL 语句。级联触发器有丰富的扩展功能,比如:可以在一个表中同时使用多个级联触发器,它可以根据不同类型的更新操作执行不同的动作,也可以在某一表的更新操作引发另一张表的变量。级联触发器可以用下面的代码Syntax创建:
CREATE [ OR REPLACE ] TRIGGER trigger_name
{ BEFORE | AFTER}
{ INSERT [ OR ] | UPDATE [ OR ] | DELETE }
[ OF col_name [, col_name ] … ]
ON cascading_table_name
[ REFERENCING { OLD [ AS ] o_alias | NEW [ AS ] n_alias | BOTH [AS] b_alias } ]
[ FOR EACH ROW ]
[ WHEN ( condition ) ]
BEGIN
{ — body of trigger | EXECUTE PROCEDURE procedure_name }
[ IF condition THEN ]
statement_list;
{ ELSIF condition THEN }
statement_list;
[ ELSE ]
statement_list;
[ END IF; ]
END;
3、字典级触发器
字典级触发器是特殊类型的数据库触发器,它是用来保护数据库字典的安全,它可以立即和动态地响应来自特定数据库用户的数据库字典更新行为。字典级触发器可以用下面的代码Syntax创建:
CREATE [ OR REPLACE ] TRIGGER trigger_name
{ BEFORE | AFTER }
{ INSERT [ OR ] | UPDATE [ OR ] | DELETE }
[ OF col_name [, col_name ] … ]
ON dba_table
[ REFERENCING { OLD [ AS ] o_alias | NEW [ AS ] n_alias | BOTH [AS] b_alias } ]
[ FOR EACH ROW ]
– WHEN ( condition ) –
BEGIN
{ — body of trigger | EXECUTE PROCEDURE procedure_name }
[ IF condition THEN ]
statement_list;
{ ELSIF condition THEN }
statement_list;
[ ELSE ]
statement_list;
[ END IF; ]
END;
以上就是 Oracle 触发器的分类方式和其基本构成语法,从上面的分类,我们可以看出 Oracle 触发器提供了一种强大、灵活可靠的数据库服务,为开发人员提供了一种独立定义和执行数据库工作流程的能力。掌握这些 Oracle 触发器功能可以帮助开发人员在设计和执行一些特定数据库操作时有更大的灵活性。