首页 > 知识点讲解
       函数与过程
知识路径: > 数据库主流应用技术 > 数据库主流应用技术 > 数据库主流应用技术 > 面向对象数据库 > 对象关系数据库系统 > 
相关知识点:9个      
        在对象关系数据库系统中允许用户定义函数与过程,它们既可以用某种数据操纵语言如SQL来定义,也可以通过外部的程序设计语言来定义,例如Java、C或C++。有些数据库管理系统支持它们自己的过程语言,如Oracle中的PL/SQL和Microsoft SQL Server中的Transact SQL,它们类似于SQL的有关过程的部分,但在语法和语义上有所区别,详细信息可参见各自的系统手册。
        假设定义这样一个函数:给定一个文档,返回其作者的人数。可以定义这个函数如下:
        
        这里Document是一个类型名。这个函数用单个文档对象来调用,select语句同关系one-doc一起执行,这个关系仅包括单个元组,即函数的参数。这个select语句的结果是单个值,严格来讲,它是一个只有单个属性的元组,其类型被转化为一个值。
        上面的函数可以使用在如下查询中,该查询返回具有多于一个作者的所有文档的名称:
        
        注意,上面的SQL表达式中,尽管在from子句中doc是指一个关系,但在where子句中它隐含地被视为一个元组变量,因此它可以用来作为author-count函数的一个参数。
        有些数据库系统允许我们使用如C或C++这样的程序设计语言来定义函数。用这种方式定义的函数比用SQL定义的函数效率更高,并且能够执行有些无法用SQL完成的计算。使用这些函数的例子有很多,如在一个元组的数据上做一个复杂的算法。
        用程序设计语言定义的函数在数据库系统的外部编译,它们需要被装入并与数据库系统代码一起执行。这个过程要冒一定的风险,因为程序中的错误可能会破坏数据库的内部结构,并且可能绕道数据库系统的存取控制功能。
        使用程序设计语言定义的函数看起来与使用嵌入式SQL没什么不一样,使用嵌入式SQL时数据库查询包含在一个通用程序中,但是它们之间还是有一个重要差别。在嵌入式SQL中,用户程序将查询传送给数据库系统执行,结果以一次一个元组的形式返回给该程序。因此,用户书写的代码永远不会需要访问数据库本身,于是操作系统就可以保护数据库不被任何用户进程所存取。当在查询中使用用户编码的函数时,要么这些代码必须由数据库系统本身运行,要么该函数所操作的数据必须被拷贝到一个分离的数据空间中。第二种方法增加了系统开销,第一种方法则诱发了潜在的脆弱性,这同时表现在完整性方面和安全性方面。
 
 相关知识点:
 
软考在线指南
优惠劵及余额
在线支付
修改密码
下载及使用
购买流程
取消订单
联系我们
关于我们
联系我们
商务合作
旗下网站群
高级资格科目
信息系统项目管理师 系统分析师
系统架构设计师 网络规划设计师
系统规划与管理师
初级资格科目
程序员 网络管理员
信息处理技术员 信息系统运行管理员
中级资格科目
系统集成项目管理工程师 网络工程师
软件设计师 信息系统监理师
信息系统管理工程师 数据库系统工程师
多媒体应用设计师 软件评测师
嵌入式系统设计师 电子商务设计师
信息安全工程师
 

本网站所有产品设计(包括造型,颜色,图案,观感,文字,产品,内容),功能及其展示形式,均已受版权或产权保护。
任何公司及个人不得以任何方式复制部分或全部,违者将依法追究责任,特此声明。
本站部分内容来自互联网或由会员上传,版权归原作者所有。如有问题,请及时联系我们。


工作时间:9:00-20:00

客服

点击这里给我发消息 点击这里给我发消息 点击这里给我发消息

商务合作

点击这里给我发消息

客服邮箱service@rkpass.cn


京B2-20210865 | 京ICP备2020040059号-5 |京公网安备 11010502032051号 | 营业执照 | Copyright ©2000-2023 All Rights Reserved 软考在线版权所有