版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《数据库原理与应用》任务4.5使用触发器记录供电申请的状态变更日志项目4:数据库编程第16讲神奇的触发器主讲人:汪菊琴本任务在EPDMS模式下创建触发器,记录供电申请的状态变更日志。当供电申请状态发生变化时,触发器被触发,并将申请供电编码、变更前状态、变更后状态、操作用户和变更时间记录到操作日志表(新建表)中。素质目标能力目标知识目标1)理解触发器的概念、作用和触发时机。2)掌握各类触发器的创建和管理。3)掌握表触发器中新、旧行值的引用规则。4)熟悉事件触发器和时间触发器的适用场景。1)能够创建满足业务需求的表触发器并正确引用行值。2)能够创建和管理事件触发器、时间触发器。3)能够管理触发器。1)培养数据完整性和业务规则约束的设计思维。2)建立数据库操作安全监控的意识。1.触发器的概念与作用
触发器与存储模块类似,都是在服务器上保存并执行的一段DMSQL程序语句,可用于保证数据完整性。
不同的是,存储模块必须被显式地调用执行,而触发器是在相关的事件发生时,由服务器自动地隐式触发。4.5.1触发器概述1.触发器的概念与作用触发器的作用:利用触发器实现表约束机制无法实现的复杂的引用完整性。利用触发器实现复杂的事务规则。利用触发器维护复杂的默认值。利用触发器实现复杂的审计功能。利用触发器防止非法的操作。4.5.1触发器概述2.触发器的分类在达梦数据库中,触发器根据触发事件主要分为以下三类::1)表触发器:对表中数据操作引发的触发。2)事件触发器:对数据库对象操作引发的触发。3)时间触发器:是一种特殊的事件触发器,在一定的时间频率下触发。其中,使用最广泛的是表触发器。4.5.1触发器概述1.创建表触发器4.5.2 表触发器语法格式如下:说明:触发时机:指BEFORE、AFTER或INSTEADOF关键字。BEFORE指在触发动作之前运行触发器;AFTER指在触发动作之后运行触发器。INSTEADOF仅允许建立在视图上,指在动作触发的时候,替换原始操作。触发事件:指使触发器启动的事件,有INSERT、DELETE和UPDATE三个关键字,代表三种操作。FOREACH:FOREACHROW表示为元组级触发器,它受被触发命令影响、且WHEN子句的表达式计算为真的每条记录执行一次。FOREACHSTATEMENT为语句级触发器,它对每个触发命令执行一次。如不写FOREACH子句,默认为语句级触发器;WHEN(<条件表达式>):表触发器中只允许为元组级触发器指定WHEN子句,
当表达式的值为TRUE时,执行触发器;否则,跳过该触发器CREATETRIGGER[<模式名>.]<触发器名><触发时机><触发事件>ON<表名>[FOREACH{ROW|STATEMENT}][WHEN(<条件表达式>)]BEGIN<触发器执行的DMSQL程序语句>END;1.创建表触发器4.5.2 表触发器【例4-29】BEFORE触发器示例1。运行上面的创建语句后,再执行如下的更新语句。可发现在“消息”窗口输出“更新金额前,请确保金额正确!”的信息,并且该用户金额已被修改。CREATETRIGGEREPDMS.TRG_USERINFO_UPDATE1BEFOREUPDATEOFBALANCEONEPDMS.T_USERINFOBEGIN PRINT'更新金额前,请确保金额正确!';END;UPDATEEPDMS.T_USERINFOSETBALANCE=105.26WHEREUSER_ID='1000000009';1.创建表触发器4.5.2 表触发器【例4-30】BEFORE触发器示例2。运行上面的创建语句后,再执行如下的更新语句。可以发现,在“消息”窗口抛出如下错误,而该用户的ID并没有被修改。CREATETRIGGEREPDMS.TRG_USERINFO_UPDATE2BEFOREUPDATEOFUSER_IDONEPDMS.T_USERINFOBEGIN RAISE_APPLICATION_ERROR(-20001,'不能修改用户编号!');END;UPDATEEPDMS.T_USERINFOSETUSER_ID='1000000050’WHEREUSER_ID='1000000009';2.新、旧行值的引用4.5.2 表触发器
在元组级触发器内部,可以通过两个引用变量:OLD和:NEW访问正在处理中的记录的数据。:OLD表示记录被处理前的值,即旧行的值。:NEW表示记录被处理后的值,即新行的值。
在触发器中通过:OLD和:NEW可以方便地获取新行或旧行的列的值,并进行判断或记录。使用时,必须采用下列形式:
其中,列名必须是触发表中存在的列,否则编译器将报错。:引用变量名.列名2.新、旧行值的引用4.5.2 表触发器
在不同的触发事件下,:OLD和:NEW的含义是不同的。:OLD引用变量只能读取,不能赋值;而:NEW引用变量既可读取又可赋值。触发事件
:OLD引用变量 :NEW引用变量INSERT无意义,所有字段都为NULL要插入的新行的值UPDATE更新前旧行的值更新后新行的值DELETE删除前旧行的值无意义,所有字段都为NULL2.新、旧行值的引用4.5.2 表触发器【例4-32】创建BEFOREINSERT触发器TRG_USER_INSERT,在插入新用户之前,先检查用户金额是否大于等于0。这里通过:NEW.BALANCE获取将要插入的新行中BALANCE列的值。CREATETRIGGEREPDMS.TRG_USER_INSERTBEFOREINSERTONEPDMS.T_USERINFOFOREACHROWBEGIN--检查金额是否大于等于0IF:NEW.BALANCE<=0THEN--抛出异常阻止插入RAISE_APPLICATION_ERROR(-20001,'金额不能小于0');ENDIF;END;2.新、旧行值的引用4.5.2 表触发器插入一条金额为-30的数据,测试上面的触发器。发现插入不能成功执行,因为-30是不合法的数据。INSERTINTOEPDMS.T_USERINFOVALUES('1000000050','王华','12345678','10602','-30',NULL);2.新、旧行值的引用4.5.2 表触发器插入一条金额为200的数据,测试上面的触发器。发现插入能成功执行,T_USERINFO表中增加了一条新的用户数据。INSERTINTOEPDMS.T_USERINFOVALUES('1000000050','王华','12345678','10602','200',NULL);1.查看触发器4.5.3 管理触发器在达梦数据库中,DBA_TRIGGERS、ALL_TRIGGERS和USER_TRIGGERS是系统提供的三个重要数据字典视图,用于查询数据库中的触发器信息。--显示数据库中所有触发器信息SELECT*FROMDBA_TRIGGERS;--显示当前用户有权访问的所有触发器信息SELECT*FROMALL_TRIGGERS;--显示当前用户拥有的触发器信息SELECT*FROMUSER_TRIGGERS;2.启用和禁用触发器4.5.3 管理触发器
触发器创建成功后,自动处于启用状态(ENABLE)。当用户希望触发器暂时不被触发,但是又不想删除这个触发器,可将其设置为禁用状态(DISABLE),语法格式如下:【例4-33】禁用例4-32中定义的触发器TRG_USER_INSERT。ALTERTRIGGER[<模式名>.]<触发器名><DISABLE|ENABLE>;ALTERTRIGGEREPDMS.TRG_TRG_USER_INSERTDISABLE;[任务实施]
本任务在EPDMS模式下创建触发器,记录供电申请的状态变更日志。1.技术分析(1) 本任务需要先创建记录供电申请状态变更的日志表,再创建触发器。最后调用任务4.4中的审批存储过程P_APPROVAL,修改供电申请状态,以此触发触发器,并进行状态变更日志记录。(2) 创建新数据表,并采用自增列和默认值约束。(3) 创建表触发器。(4) 引用变量:OLD和:NEW的使用。[任务实施]2.实现步骤(1)创建记录供电申请状态变更的日志表T_SUPPLYSTATUS_LOGS。(2)创建触发器TRG_SUPPLYSTATUS_CHANGE。当供电申请状态变更后,在日志表T_SUPPLYSTATUS_LOGS中插入一条变更记录。使用存储过程实现供电申请和审批[任务测试]
运行以上代码,并调用任务4.4中的审批存储过程P_APPROVAL,将供电申请状态从0修改为1,即审批通过,代码如下。
调用后,由于申请状态发生了变化,触发器被触发,因此在日志表T_SUPPLYSTATUS_LOGS中插入了一条申请状态变更记录,记录操作日志。该记录包含申请供电编码、变更前状态、变更后状态、操作用户和变更时间。CALLEPDMS.P_APPROVAL(1,'10601','100000’);评价指标评价标准分值得分创建日志表成功创建表,且字段个数、类型及相关约束正确30创建触发器成功创建触发器,触
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年AI珠宝设计软件构建珠宝设计质量追溯系统
- 建筑卫生陶瓷车间安全管理细则
- 康养理念导向下乡村民宿景观设计研究
- 建筑工程施工管理实务
- 环保阻燃新材料生产项目技术方案
- 科技园区配套项目国债可行性研究报告
- 垃圾分类与处理技术的应用方案
- 监控系统安装规范方案
- 室内装饰装修金属饰面工程SOP文件
- 遥感监测设备田间布设SOP
- 养老院章程范本2016
- DB52T 1283-2018 精准扶贫 农村“组组通”硬化路建设与管理养护规范
- 车厢维修合同范本
- CSAE标准-汽车整车气动声学风洞风噪试验-车内风噪测量方法编制说明
- (高清版)JTG 3810-2017 公路工程建设项目造价文件管理导则
- 英语48个国际音标课件(单词带声、附有声国际音标图)
- 安徽省蚌埠市蚌山区2023-2024学年八年级上学期月考数学试题
- 标准钎探记录表
- SFSP5660锤片式粉碎机使用说明书
- 建筑马明哲的管理之路平安心语
- 先天性心脏病介入治疗的护理
评论
0/150
提交评论