



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 GKD-Base中Instead-Of触发器实现的关键技术 陈 浩, 廖 巍, 陈宏盛, 时间:2008年07月24日 字 体: 大 中 小 关键词: 摘要:关键词: PL/SQL引擎 Instead-Of触发器GKD-B
2、ase是一个具有自主知识产权的数据库管理系统,经过十几年的发展和应用,该系统已经被证明是稳定可靠的。但是,随着应用需求向深度和广度的发展,GKD-Base在很多方面都暴露出了不足,如不支持过程式SQL语言、不支持存储过程和函数、缺少触发器功能等,这都为GKD-Base数据库管理系统的进一步推广应用带来了不小的障碍。为此笔者开发了GKD-Base PL/SQL引擎,其兼容Oracle PL/SQLV2.3规范。进而在引擎的基础上实现了GKD-Base DML触发器功能12、SQL Server3、PostgreSQL4等都提供了所谓的Instead-Of视图触发器来支持视图更新。定义有Inste
3、ad-Of触发器的视图被DML语句操作时,相应的DML语句不执行,而触发器体被执行,于是用户可以按照自己定义的语义修改定义视图的基本表,以达到修改视图的目的。因此,为了使GKD-Base适应应用需求的发展,在GKD-Base PL/SQL引擎的基础上实现了GKD-Base Instead-Of视图触发器功能1。1 视图更新歧义问题 视图是虚拟的关系,数据库系统中只存储它的定义,不存储元组数据。一个视图可以看成一个临时关系,视图是产生这种临时关系的查询定义5。由于视图是虚拟的关系,对视图的更新操作必须映射到对相应的基本表操作才能实现。完成视图更新后的数据库状态由视图定义导出一个新的视图状态,新的
4、视图状态对应由原视图状态直接完成视图的更新操作。如图1所示,u是关系数据库DB的视图v(DB)的更新操作,T(u)是对视图更新操作的变换,它作用到DB上产生新的数据库状态DB、新的视图状态v(DB)。正确的视图更新操作使得u(v(DB) v(DB)。但是对视图更新操作的变换T(u)并不总存在6。即使存在,也不总是惟一的。视图的更新存在固有的歧义性,仅有上面的语义是不够的。并且,由于视图本身的歧义性和语义不完整性7,无法对于有着集合操作符(如:UNION、MINUS等)、聚集函数(如:SUM、AVE等)和GROUP BY子句的视图更新提供支持。2 Instead-Of触发器设计实现2.1 PL/
5、SQL引擎体系结构8。2.2 Instead-Of触发器设计GKD-Base DML触发器采用传统的ECA(Event-Condition-Action,事件条件动作)规则设计。与之类似的Instead-Of 视图触发器也采用了ECA规则。为了适应触发器的具体情况,在GKD-Base中,Instead-Of 视图触发器扩展为一个四元组模型:Trigger:= 。其中:E(Event):激发Instead-Of 视图触发器的事件。这里主要是指操作视图的DML事件,包括Insert、 Delete和Update等。C(Condition):定义触发器时指定的条件。是一个一元谓词表达式。A(Acti
6、on):当Event发生,并且Condition为真时,触发的动作。S(Status):触发器有活跃和休眠两种状态,触发器处于活跃状态时,才可被激发。触发器实现框架如图2所示。触发器类别判决器是在系统执行SQL语句之前,对SQL语句的操作对象进行判断,如果是对基本表操作,则启动DML触发器的监测功能;如果是对视图进行操作,则启动Instead-Of 视图触发器的监测功能。事件监视器是在有关的系统行为发生时,为各种预定的事件给触发器调度器发送信号。触发器调度器接收事件监视器的信号,从数据字典中获取该事件点火的所有触发器,并且按照特定的顺序排序,调用条件评价器检查各触发器的触发条件是否满足,若满足
7、则由触发器调度器通知PL/SQL引擎解释执行该触发器的动作代码。条件评价器是用来检查触发条件是否满足的部件。对于语句级触发器,由于不存在触发条件子句,所以触发条件始终为真。对于行(元组)级触发器,条件评价器可以将其触发条件WHEN子句转换成一个PL/SQL语言的IF语句,然后由PL/SQL引擎实现触发器条件的计算。2.3 Instead-Of触发器实现触发器谓词是指触发器内部用来标识激发触发器动作的DML语句的布尔变量,为:INSERTING、UPDATING、DELETING。其分别对应于PL/SQL程序中的三个布尔变量,它们在编译触发器时被加载到符号表中,在调用PL/SQL引擎执行触发器动
8、作体之前,它们的值被准备好,供PL/SQL引擎取用。NEW和OLD元组作为PL/SQL程序中的记录样式加载到符号表中,被编译器引用。其记录域与新旧元组对应的表的各个属性一一对应。在调用PL/SQL引擎执行触发器动作体之前,必须准备好NEW和OLD的值。但NEW和OLD元组是伪记录类型,不能完全按照记录的语法来访问12。这一点必须在编译时加入新的语义规则。功能:编译触发器定义语句后,将触发器信息存储于数据字典中。输入:一条用户输入的触发器定义语句。输出:触发器数据字典的元组。(1)判断当前事务是否存在,如果存在,则提交当前事务,并开始一个新事务;否则,直接开始一个新事务。(2)用户权限检查。如果
9、当前用户无权执行该操作,转(12);否则转(3)。(3)检查触发表(视图)名及触发事件所涉及的属性是否存在。在GKD-Base的数据字典SYS.TABLES中查找,如果触发表或某个属性不存在,转(12);否则,转(4)。(4)触发器名存在性检查。如果当前定义的触发器与以往定义的某个触发器重名,转(5);否则转(7)。(5)如果声明语句中没有包含 OR REPLACE选项,转(12);否则,转(6)。(6)如果触发表(视图)不一致,转(12);否则转(7)(触发表指定义了DML触发器或Instead-Of 视图触发器的基本表或视图)。(7)检查定义触发器的合法性,DML触发器只能定义在基本表上,
10、而Instead-Of视图触发器只能定义在视图上。检查合法,转(8),否则转(12)。(8)调用PL/SQL引擎编译触发器动作体,并且将触发器的WHEN条件子句转换成一个IF语句,这个IF语句的真值部分包括了触发器动作体。如果触发器动作体中出现语法或语义错误,转(12);否则转(9)。(9)在数据字典SYS.TRIGGERS表中插入一个新元组,填入此触发器的信息。如果出现磁盘I/O错误,转(12);否则转(10)。(10)释放所占资源。(11)提交当前事务,正常结束。(12)回滚当前事务,报错退出。与DML触发器不同,Instead-Of 视图触发器在激发时,不必考虑各种触发器(如语句级前触发
11、器和行级后触发器)之间的相互缠结。其点火算法也相对简单。 在触发事件当前的事务中构造一条SQL查询语句,从触发器数据字典表中获取与该触发事件相关的处于活跃状态的Instead-Of视图触发器元组。如果查询结果不为空,将触发器条件转换成一个PL/SQL语言的IF语句,并将触发事件当前所用到的元组值(新值和旧值)准备好,启动PL/SQL引擎,对触发器动作体的源代码进行解释执行。释放所占的资源,结束触发器调用。3 系统应用实例3.1实验数据Rooms表如表1所示,Classes表如表2所示。在Classes表和Rooms表中Room_ID相等的连接条件上创建一个名为Classes_rooms的视图,
12、进行连接运算。Classes_rooms视图如表3所示。定义关于Classes_rooms 的Update语义:通过对Classes_rooms的Update操作,实现对一个班级某门课程占用教室的调整。通过Instead-Of触发器实现:如果修改了Classes_rooms的Dept和Course属性,那么就修改Classes基本表的相应属性,如果修改了Classes_rooms的Building和Room_Num属性,那么就修改Rooms基本表的相应属性。再适当调整两个基本表的Room_ID。3.2 实验结果执行UPDATE classes_rooms SET Dept=NUT, course = 307 WHERE building=Buidling 7 AND room_num = 201; 查询更新后的视图,观察Instead-Of触发器对视图的作用。表4、表5、表6演示了本实验的结果。由结果可知,通过Instead-Of触发器,成功地对Classes_rooms视图进行了修改,将历史系101课的教室调整给了营养系307课程使用。通过以上应用实例验证了Instead-Of触发器带给数据库系统的视图修改功能。本文参照Oracle PL/SQL V2.3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 实操型执业护士考试备考试题及答案
- 药师考试常见问题及试题及答案
- 2025年执业医师考试听说提升法试题及答案
- 2025年行政管理语文考试的全方位试题与答案
- 行政法学辅导材料试题及答案
- 行政管理发展趋势与试题及答案讲解
- 备考自考行政管理专科的试题与答案
- 2025年执业医师考试试题及答案全解析
- 行政管理专科考前冲刺试题及答案
- 2025年执业医师考试复习竞争策略试题及答案
- 2023年二级注册计量师考试题目及答案
- 武汉武昌区五校联考2023-2024学年中考五模英语试题含答案
- 公路水运工程施工企业主要负责人和安全生产管理人员考核大纲和模拟试题库1
- 设备管理工作总结汇报
- 店铺合租合同模板
- 湖南少数民族舞蹈智慧树知到期末考试答案章节答案2024年湖南师范大学
- 公园维修施工组织设计方案方案
- DZ∕T 0153-2014 物化探工程测量规范(正式版)
- 2024年百联集团有限公司招聘笔试冲刺题(带答案解析)
- 以案促改学习研讨发言材料
- ISO TR 15608-2017-中英文版完整
评论
0/150
提交评论