第六章存储过程..doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章存储过程.

第六章 存储过程(Stored Procedure) 6.1 存储过程的概念 通常情况下,在客户-服务器体系结构中,运行在客户端的应用程序通过SQL对服务器端的数据库进行访问时,每一条SQL语句是分别地、一句一句地从客户端向服务器发出请求,然后数据库服务器再将结果一个一个地返回给应用程序。但是,有一些应用程序,涉及的服务器端数据库处理活动很多,而与用户的交互活动较少,在这种情况下,将有关数据库的处理活动以储存过程的形式放在数据库服务器上完成,则可以大大减轻网上传输流量,提高应用程序性能。储存过程的概念如下图所示。 图6-1 普通程序的执行过程 图6-2 存储过程应用的体系结构 使用储存过程的应用程序具有以下优点: 减少网上传输流量; 改善服务器处理密集型应用的性能; 可以访问数据库服务器特有的功能特性; 易于维护; 6.2 存储过程的程序结构 一个完整的使用储存过程的应用程序由两部分组成:一是储存过程本身,它被存放在数据库服务器端并数据库服务器上运行;二是对存储过程进行调用的客户端应用程序,它在客户端上运行。客户端应用程序与服务器端储存过程分别运行在两个不同的进程空间中,并且有不同的功能划分。 客户端应用程序的主要功能是: 为有关数据结构和主变量定义、分配并初始化存储空间; 与数据库进行连接; 通过SQL CALL语句调用存储过程 完成事务的提交(COMMIT)和回滚(ROLLBACK)(注:除非采用分布式工作单元,服务器端的存储过程也可以完成事务的提交和回滚); 执行CONNECT RESET语句; 服务器端储存过程的主要功能是: 接收客户端应用程序传送的SQLCA和SQLDA等数据库结构; 作为与客户端应用程序相同的事务在数据库服务器上运行; 向客户端应用程序返回SQLCA和其它输出数据; 6.3 客户端应用程序 客户端应用程序在使用CALL语句调用存储过程之前必须先执行几个步骤。首先,必须连接数据库,声明、分配并初始化SQLDA结构或宿主变量。 提示:不要在数据库服务器上分配这些变量结构。数据库管理系统将根据客户端应用程序中的结构在服务器端自动分配所需的存储。 客户端应用程序必须保证在调用存储过程之前已建立了数据库连接,否则,将会产生错误。 6.3.1 CALL 语句 客户端应用程序可通过CALL语句向服务器发出存储过程调用请求。CALL的语法格式如下所示: CALL {过程名|主变量名}{(主变量1,…,主变量N)|USING DESCRIPTION 描述符名} CALL语句的作用是将调用参数通过一个SQLDA数据结构从客户端传送给服务器端的存储过程,存储过程执行后再将输出结果通过同一个SQLDA返回给客户端应用程序。 有关被调用存储过程的名称的规定 在客户端应用程序中,被调用的存储过程的名称既可以直接给出,也可以通过一个主变量给出。 如果被调用的存储过程的名称是直接给出的,则它必须是一个通常的标识符(identifier)并且长度不能超过254个字节。由于通常的标识符中不能含有空格或其它特殊字符,所以,如果被调用的存储过程的名称中必须包含有空格或其它特殊字符时,则只能使用主变量来给出其名称。 如果是通过主变量给出被调用的存储过程的名称,则使用的主变量必须是一个具有长度属性的字符串型的变量,并且其长度不能超过254个字节。 被调用的存储过程的名称可以采用下列几种格式: proname:表示要装入名为proname 的存储过程函数库并执行其中名为proname的函数; proname!funcname:表示要装入名为proname 的存储过程函数库并执行其中名为funcname的函数; 注:按照缺省方式,在基于UNIX的平台上,数据库管理系统将在INSTHOME/sqllib/function目录中查找被隔离的(fenced)存储过程函数库。而在Intel平台上,存储过程函数库的搜索位置则由操作系统环境变量LIBPATH说明。对于不加隔离的(unfenced)存储过程函数库,其搜索位置分别是INSTHOME/sqllib/ unfenced(基于UNIX的系统)或sqllib\dll\unfenced(基于Intel的系统)。 绝对路径:如/home/user1/procname!funcname即表示要装入/home/user1目录下的名为proname 的存储过程函数库并执行其中名为funcname的函数; 通过宿主变量传递过程调用参数 以下是一段通过宿主变量传递过程调用参数的程序例子: EXEC SQL BEGIN DECLARE SECTION; ch

文档评论(0)

wuyuetian + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档