达梦数据库触发器

       达梦数据库中触发器分为表触发器、事件触发器和时间触发器。下面主要记录一下表触发器的基本使用方法。

       表触发器是对表里数据操作引发的数据库的触发,下面先介绍两个概念:

触发级别

      根据触发器的级别可分为元组级 (也称行级)和语句级。

      元组级触发器,对触发命令所影响的每一条记录都激发一次。元组级触发器是在触发器定义语句中通过FOR EACH ROW子句创建的。

      语句级触发器,对每个触发命令执行一次。语句级触发器是在触发器定义语句中通过FOR EACH STATEMENT子句创建的,该子句可缺省。

触发时机

      BEFORE 指明触发器在执行触发语句之前激发。

      AFTER 指明触发器在执行触发语句之后激发。

      INSTEAD OF 指明触发器执行时替换原始操作INSTEAD OF 触发器仅允许建立在视图上,并且只支持行级触发。

下面通过具体的示例来进一步说明表触发器的基本使用方法:

示例一:

CREATE OR REPLACE TRIGGER TRG_UPD

AFTER UPDATE OF NAME,PHONE ON PERSON.PERSON

BEGIN

 PRINT 'UPDATE OPERATION ON COLUMNS NAME OR PHONE OF PERSON';--触发器体

END;

      上面创建了一个触发器,该触发器为语句级触发器;触发时机为在执行触发语句之后激发

触发条件:更新表PERSON.PERSON中NAME,PHONE两列的值之后,会触发触发器体执行。

验证结果如下:

      执行完后,会输出UPDATE OPERATION ON COLUMNS NAME OR PHONE OF PERSON,说明触发器TRG_UPD被激发。

示例二:

CREATE OR REPLACE TRIGGER TRG_DEL_ROW

BEFORE DELETE ON PERSON.PERSON

FOR EACH ROW //元组级:此子句一定不能省略

BEGIN

 PRINT 'DELETE' || :OLD.NAME|| ' ON PERSON';--触发器体

END;

      上面创建了一个触发器,该触发器为元组级触发器;触发时机为在执行触发语句之前激发触发条件:删除PERSON.PERSON表中的数据,会触发触发器体执行。

验证结果如下:

      从执行结果来看,每删除一条行记录,都会触发触发器体中的操作。

注:在元组级触发器内部,可以访问正在处理中的记录的数据,这种访问是通过两个引用变量:OLD 和:NEW 实现的上面的示例中,通过引用变量:OLD,来输出被删掉记录中的name字段值。

触发器激发顺序:

1.如果有语句级前触发器的话,先运行该触发器;

2.对于受语句影响每一行:

1) 如果有行级前触发器的话,运行该触发器;

2) 执行该语句本身;

3) 如果有行级后触发器的话,运行该触发器。

3.如果有语句级后触发器的话,运行该触发器。

示例三:

--创建触发器

CREATE OR REPLACE TRIGGER Reader_Before_St

BEFORE UPDATE ON OTHER.READER    --语句级前触发器

BEGIN

 PRINT 'BEFORE UPDATE TRIGGER FIRED';

END;

CREATE OR REPLACE TRIGGER Reader_After_St

AFTER UPDATE ON OTHER.READER     --语句级后触发器

BEGIN

 PRINT 'AFTER UPDATE TRIGGER FIRED';

END;

CREATE OR REPLACE TRIGGER Reader_Before_Row

BEFORE UPDATE ON OTHER.READER    --元组级前触发器

FOR EACH ROW

BEGIN

 PRINT 'BEFORE UPDATE EACH ROW TRIGGER FIRED';

END;

CREATE OR REPLACE TRIGGER Reader_After_Row

AFTER UPDATE ON OTHER.READER     --元组级后触发器

FOR EACH ROW

BEGIN

 PRINT 'AFTER UPDATE EACH ROW TRIGGER FIRED';

END;

      上述创建了4个触发器,现执行update操作,用来触发触发器,通过输出的触发器体中的信息,可以对触发顺序进行验证。

达梦社区:https://eco.dameng.com

  • 23
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值