`
hulunberbus
  • 浏览: 858253 次
文章分类
社区版块
存档分类
最新评论

intebase的存储过程、触发器以及事件、异常

 
阅读更多

说明:本来我想把《interbase中文开发指南》中有关存储过程、触发器的章节全部照搬过来,但考虑到存储过程、触发器的重要性,相信大部分人已经进行了相当的研究,因此,为了节约篇幅和时间,我把其中的定义、变量声明、语句语法等大量内容全部删除;其中,事务处理请参照前面的帖子。请大家谅解。感兴趣的可以参考有关资料。
一、使用存储过程、触发器的好处
1、在不需要客户端的情况下在服务器端执行复杂的操作
2、可以被多个客户端共享使用(代码共享)
3、极大的减小网络流量,提高网络利用率
4、在服务器端执行,速度快
5、可以将复杂的任务划分为多个简单的商业逻辑
6、存储过程对某些需要周期性处理的任务特别有用
7、存储过程在客户端和服务器端提供了良好的并发性
8、触发器是维护数据一致性的基本工具
9、触发器常被用在为插入新行提供唯一主键值
10、触发器常被用来保存一些状态信息
11、存储过程和触发器是interbase事件警告机理的有力组成部分
12、存储过程增强了数据的安全性
二、何时使用存储过程和触发器
存储过程:1、不需要任何客户端信息而在服务器端完成的操作2、涉及到大量行的操作、运算3、频繁的、周期性的操作4、那些被多个模块共同执行的操作
触发器:1、before insert/update触发器可以检查操作是否完成以及数据的一致性,或者为那些需要唯一编号的列提供数值2、before delete触发器可以在删除时检查主要明细表之间的关系,也可以终止删除。3、所有的before触发器均可以通过激发异常终止操作回退事务4、所有的after触发器均可以在更改完成后做一些审计或更改其他相关表的操作。
三、存储过程
一般的,interbase的存储过程分为两大类,它是根据客户端在调用存储过程时使用的不同方法划分的。一类是选择式存储过程,客户端使用select语句调用存储过程,此时存储过程的作用好像和表、视图一样,选择式存储过程必须返回一个或多个数值(在客户端的行为象数据行)或错误或参数信息。另一类是执行式存储过程,客户端使用excute procedure来调用存储过程,这类存储过程大多数只执行一些动作而不返回数值,当然它也可以返回一些参数信息。创建存储过程时你一定要事先规划好你准备按照哪一类进行编写,这是确保存储过程可能正确执行的良好习惯。如果你准备将来在客户端使用select调用,就遵守选择式存储过程的规则编写;如果你想使用excute procedure调用,就按照执行式存储过程的规则编写。存储过程的类型不同,suspend,exit,end的功能也不同。下面说明suspend,exit,end在两类存储过程中的作用。
1、suspend语句:在选择式存储过程中,当存储过程向客户端返回数据时,suspend暂时停止存储过程的执行,即挂起存储过程,直到客户端获取了返回值为止,然后接着suspend之后的语句继续执行。suspend的作用就是当有数据要返回客户端时防止客户端未成功取得返回值而继续执行存储过程,从而有可能导致将存储过程执行结束退出。根据上述说明,就可以了解,当你在选择式存储过程中使用select或select into等语句向客户端返回数据(行)时,在上述语句之后一定要紧跟suspend语句。在复杂的存储过程中,不可能只有select性质的sql语句,可能还有insert,update,delete等可执行语句,这时就要明白,在选择式存储过程中,suspend语句之后的所有可执行语句都被执行,尽管此时已经没有值要返回给客户端,最后的end语句终止整个存储过程的执行。interbase不推荐在执行式存储过程中使用suspend。因为在执行式存储过程中,suspend语句之后的所有语句永远都不会被执行,程序将直接跳转到最后一个end语句,并返回参数,退出存储过程。所以如果你偶尔(或不得不)没有遵守interbase推荐的规则在执行式存储过程中使用了suspend而产生了意料不到的结果,你就要思考一下suspend的用法了。
2、exit语句:在选择式存储过程中,exit语句直接将程序执行跳转到最后一个end语句从而终止存储过程的执行。因此,在选择式存储过程中,使用exit语句最理想的情况是当需要在满足一定条件时提前结束存储过程的执行。在执行式存储过程中,exit也将程序执行跳转到最后一个ennd语句,表明存储过程的工作已经完成,同时如果有返回参数的话,将他们返回给客户端。
3、end语句:在选择式存储过程中,当执行到最后一个end语句时,结束存储过程的执行,将控制权返给客户端,并设置sqlcode为100。在执行式存储过程中,最后一个end语句也终止存储过程的执行,同时将输出参数返回给客户端(如果有的话)。
因此,可以将suspend,exit,end三个语句的作用简明地总结如下:suspend用于返回具有数据行性质的数值给客户端;exit用于提前结束程序的执行;end则用于真正终止存储过程并将输出参数返回给客户端。
三、存储过程、触发器中的事件、异常、错误处理
1、事件:interbase一个显著的特点就是可以在存储过程、触发器中通过使用事件来进行异步消息处理。相信有很多人已经感受到服务器端和客户端进行异步消息处理的迫切性了。interbase在存储过程、触发器中允许使用post_event来帮助我们解决上述问题。所谓事件,实际就是一个自定义的消息标识,用以实现服务器与客户端的异步通信。使用事件的方法是:在存储过程或触发器中用post_event("xxxxx")定义并向interbase的消息管理队列添加注册消息,这是服务器端。在客户端,首先注册相应的消息,然后当服务器端投寄了消息之后,客户端对该消息作出相应的反应。需要注意的是,如果服务器端发起了多个相同的消息,那么服务器只向客户端投寄一个消息而不是将所有这些消息全部投寄给客户端。如果你使用delphi的IBX编写客户端的话,就可以很方便地使用TIBevent组件进行消息处理。
2、异常:异常是interbase数据库的一个对象,它实际是一个经过命名的错误。但是一定要注意而且区分,异常决不是用来处理intebase数据库错误的(比如主键约束错误等),它只是用来实现所谓的商业逻辑的。比如你不允许用户删除当前活动订单中的库存项目就可以用户执行存储过程欲删除库存时激发一个异常,表明不能进行删除。可见,异常完全是一个商业逻辑行为。异常被激发后,整个存储过程或触发器将被终止,该存储过程或触发器所在的事务链将被回退,并向客户端返回定义的有关错误说明。
事件与异常的比较:事件发生后,不影响程序的执行,事件在需要服务器端通知客户端消息时非常重要,事件机理本身是多线程结构,无须客户端一直去检测等待;异常激发后,则终止程序执行,回退全部事务。
3、intebase错误处理:在interbase中,错误一般分为数据库错误和数据库引擎错误。而在存储过程中,一般使用when....do语句进行错误处理,和delphi的try...exception类似。when...do可以捕获并处理一下三类错误:异常(用户自定义逻辑错误)、数据库错误(SQL错误:通过变量sqlcode进行检测)、数据库引擎错误(interbase错误:通过变量GDScode检测)。


分享到:
评论

相关推荐

    Intebase应用开指南

    Intebase应用开指南,国内唯一的InterBase 书籍。

    信息技术-InteBASE能效管理系统.docx

    信息技术--InteBASE能效管理系统

    InteBASE能效管理系统讲解.doc

    InteBASE能效管理系统讲解.doc

    {信息技术}信息技术IBASE能效管理系统.doc

    (信息技术)信息技术IBASE能效管理系统 第八讲:InteBASE能效管理系统 我国建筑节能发展现状: 随着经济的不断发展和科技的突飞猛进,人们对其生活和工作环境的舒适性要求不 断地提高,建筑能耗也逐渐增大,工业...

    基于 Java 实现的宠物医院在线挂号系统

    基于 Java 实现的宠物医院在线挂号系统 基于 Java 实现的宠物医院在线挂号系统

    天津欢乐谷官方网站html5响应式触屏版手机wap旅游网站模板.zip

    触屏版自适应手机wap软件网站模板 触屏版自适应手机wap软件网站模板

    基于matlab实现的混沌扰动算法来解决pso算法早熟问题,并用二者结合来训练灰色预测模型参数.rar

    基于matlab实现的混沌扰动算法来解决pso算法早熟问题,并用二者结合来训练灰色预测模型参数.rar

    基于matlab实现的活性污泥模型的计算中进水水质转化的源代码.rar

    基于matlab实现的活性污泥模型的计算中进水水质转化的源代码.rar

    node-v5.7.1.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    使用Fcn UNet训练防焊无开口-python源码.zip

    使用Fcn UNet训练防焊无开口-python源码.zip

    ONNXRuntime部署LSTR基于Transformer实时车道线检测包含C++和Python源码+模型+说明.zip

    ONNXRuntime部署LSTR基于Transformer实时车道线检测包含C++和Python源码+模型+说明.zip

    2021-2010上市公司和讯网社会责任评级CSR-股东员工客户消费者环境社会责任分项评级

    上市公司和讯网社会责任评级CSR-股东责任员工责任客户消费者环境社会责任分项评级 得分(2010-2021年) "中国上市公司-和讯网社会责任数据"是 一份来自和讯网的数据集,它同步并收集了中国上市公司关于社会责任的相关信息。包括了 公司在股东责任、员工责任、供应商客户消费者权益责任、环境责任、社会责任中的表现和 成绩,以反映公司承担社会责任的程度。可以帮助大家了解公司在承担社会责任方面的具体 表现。这对于研究公司社会责任与公司业绩、公司声誉、公司风险等方面的关系具有参考意 义。 一、数据介绍 数据名称:上市公司和讯网社会责任评级CSR-股东责任员工责任 客户消费者环境社会责任分项评级得分 数据年份:2010-2021年 样本数量:每 年含2300-4600左右上市公司数据,总数据量40058条(注:因披露口径原因 ,2021年仅有430+上市公司数据) 数据格式:Excel面板数据 二、指标说 明 共计11个指标:股票名称、股票代码、年份、总得分、等级、股东责任、员工责任、 供应商客户和消费者权益责任、环境责任、社会责任、统计日期 三、部分excel数据 展示

    用Stata怎样检验调节效应和被调节的中介效应:学习课件,数据、程序命令源代码

    用Stata怎样检验调节效应和被调节的中介效应:学习课件,数据、程序命令源代码 自己重新整理,不存在任何版权、争议的商业信息! 用Stata怎样检验调节效应和 被调节的中介效应:学习课件,数据、程序命令源代码 用Stata怎样检验调节效应和 被调节的中介效应:学习课件,数据、程序命令源代码 用Stata怎样检验调节效应和 被调节的中介效应:学习课件,数据、程序命令源代码 用Stata怎样检验调节效应和 被调节的中介效应:学习课件,数据、程序命令源代码

    机械设计导套自动供料机sw18可编辑非常好的设计图纸100%好用.zip

    机械设计导套自动供料机sw18可编辑非常好的设计图纸100%好用.zip

    数学建模比赛知识点介绍.zip

    数学建模 数学建模比赛的知识点非常广泛,涵盖了多个数学领域和实际应用领域。以下是一些常见的数学建模比赛知识点介绍: 线性代数:线性代数是数学建模中非常重要的基础知识,包括矩阵运算、线性方程组、向量空间、特征值和特征向量等。这些知识点在解决优化问题、控制系统、信号处理等领域都有广泛应用。 微积分:微积分是数学建模中另一个重要的基础知识,包括函数的极限、导数、微分、积分等。微积分在物理、工程、经济等领域都有广泛应用,例如解决动力学问题、优化问题、概率统计问题等。 概率论与数理统计:概率论和数理统计是数学建模中处理不确定性和随机性的重要工具。这包括随机变量、概率分布、随机过程、假设检验、回归分析、方差分析等。这些知识点在风险评估、市场预测、质量控制等领域都有广泛应用。

    IEC 60947-9-1-2019 低压开关设备和控制设备第9-1部分:主动电弧故障缓解系统灭弧装置.pdf

    IEC 60947-9-1-2019 低压开关设备和控制设备第9-1部分:主动电弧故障缓解系统灭弧装置.pdf

    node-v10.19.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    机械设计全自动进料插件机sw18非常好的设计图纸100%好用.zip

    机械设计全自动进料插件机sw18非常好的设计图纸100%好用.zip

    豪华版XX主数据管理解决方案(63页).ppt

    【豪华版】XX主数据管理解决方案(63页).ppt

    node-v4.3.2.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics