GBase新闻
“G”术时刻 | 深入解析GBase 8s数据库DML触发器的工作机制与实战应用
GBase 8s作为南大通用旗下的一款企业级事务型数据库产品,其健壮的DML触发器功能能够帮助开发者实现自动化任务、数据审计、数据完整性保护等多种应用场景。本文将详细介绍GBase 8s中DML触发器的语法、特性、使用示例以及一些最佳实践,帮助您更好地理解和应用这一功能。
DML 触发器简介
GBase 8s的DML触发器语法,SQLMODE设置要在ORACLE 兼容模式下执行。
DML 触发器定义
当某些数据操作事件发生时,数据库应该采取的操作。在相关的事件发生时,由数据库自动地隐式地激发语句集合,即直到一个语句激发的所有触发器执行完成之后该语句才结束,而其中任何一个触发器执行的失败都将导致该语句的失败。
DML 触发器在表上创建,其触发事件由 DML 语句DELETE、INSERT和UPDATE 组成。
DML 触发器语法
create [or replace] trigger [databasename.]trigger_name ——触发器名称
{before|after} ——触发时间
{ DELETE | INSERT | UPDATE [ OF column [, column ]... ] }
[ OR { DELETE | INSERT | UPDATE [ OF column [, column]... ] }... ——触发事件
on [databasename.]表名 ——触发对象
[REFERENCING { OLD [ AS ] old | NEW [ AS ] new}...][ FOR EACH ROW ] ——触发级别
[ ENABLE | DISABLE ] [ WHEN ( condition ) ] ——触发模式及触发条件
PLSQL块 ——触发体
从上述语法可以看到,dml触发器由触发时间、触发时间、触发事件等组成,相关概念解释如下:
触发时间:触发事件和该 TRIGGER 的操作顺序。 BEFORE 指明触发器在执行触发语句之前激发;AFTER 指明触发器在执行触发语句之后激发;
触发事件:引起触发器被触发的 DML 语句事件,包括 INSERT 、DELETE 、UPDATE;
触发对象:被定义触发器的数据库对象,当前版本仅支持基表;
触发操作/触发体:即该 TRIGGER 被触发之后要执行的 PLSQL 语句块;
触发级别:即语句级触发器和行级触发器;
语句级触发器:是指当某触发事件发生时,该触发器只执行一次;
行级触发器:是指当某触发事件发生时,对受到该操作影响的每一行数据,触发器都单独执行一次,使用 FOR EACH ROW 定义;
触发模式:设置触发器为启用(ENABLE)或禁用(DISABLE);
触发条件:由 WHEN 子句指定一个逻辑表达式。必须在行级触发器下使用,即必须与FOR EACH ROW 一同使用。只有当该表达式的值为 TRUE 时,遇到触发事件才会自动执行触发器,使其执行触发操作。
DML 触发器中新、旧行值的引用
仅在行级触发器,可以使用新、旧行值的引用访问正在处理的行中的数据;
缺省的引用名是:OLD、NEW,可使用REFERENCING 子句修改;
OLD表示记录被处理前的值;NEW 表示记录被处理后的值。
在触发体内,使用以下语法引用新旧行的字段:
引用名.列名
OLD、NEW不同触发事件下含义如下:
DML 触发器中触发体的补充说明
DML触发器的触发体是由PLSQL块语法定义。SQLMODE 在 ORACLE 兼容模式下,触发器触发体定义需支持 PLSQL语法定义。
<触发体> ::=[ DECLARE <声明部分>]BEGIN<执行部分>END [触发器名称];
当前版本已实现的 PLSQL 语法在触发体部分均支持。
DML 触发器使用示例
注意:以下所用示例使用的数据库版本为:GBase8sV8.8_TL_3.5.1_x86_64
用例1:多个触发事件的DML触发器
用例2:禁用/启用触发器
用例3:删除触发器
说明:删除触发器的触发对象后,其相关的触发器都会被自动删除。
用例4:新旧值的引用_insert_新值
用例5:新旧值的引用_insert_旧值
用例6:新旧值的引用_delete_旧值
用例7:新旧值的引用_delete_新值
以上为DML触发器使用的简单介绍,通过合理使用DML触发器,可以显著提高数据库的自动化程度和数据管理效率。希望本文的介绍和示例能够帮助您更好地理解和应用DML触发器。如果您有任何疑问或需要进一步的帮助,欢迎随时在社区中提问。