当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > 存储过程的一点相关资料

Unix/Linux
Linux crontab定时执行任务 命令格式与详细例子
linux 查看用户及用户组的方法
让Linux系统有效防御ARP攻击的实用技巧
Linux 常用软件列表
linux wget 一个强大的下载命令
linux 常用脚本、命令
linux 磁盘配额 简单介绍
Linux服务器架设笔记 Squid服务器配置
ubuntu intel 集成显卡安装
ubuntu 9.04 X3100 显卡开启3D特效
Ubuntu 8.10 Server Ruby 的安装方法
Ubuntu root帐户密码修改
ubuntu下apt-get 命令参数
Ubuntu Linux下实现QQ的三种方式
Ubuntu 8.04中建立PHP+MySQL环境
Ubuntu常用软件大全
Ubuntu系统下安装Aircrack-ng
Ubuntu实现FTP功能
ubuntu 字体美化实现方法
ubuntu下netbeans汉字显示残缺问题

Unix/Linux 中的 存储过程的一点相关资料


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 32 ::
收藏到网摘: n/a

存储过程的一点相关资料
存储过程的一点相关资料   1 存储过程的概念 通常情况下,在客户-服务器体系结构中,运行在客户端的应用程序通过SQL对服务器端的数据库进行访问时,每一条SQL语句是分别地、一句一句地从客户端向服务器发出请求,然后数据库服务器再将结果一个一个地返回给应用程序。但是,有一些应用程序,涉及的服务器端数据库处理活动很多,而与用户的交互活动较少,在这种情况下,将有关数据库的处理活动以储存过程的形式放在数据库服务器上完成,则可以大大减轻网上传输流量,提高应用程序性能。储存过程的概念如下图所示。 使用储存过程的应用程序具有以下优点:A:减少网上传输流量;B:改善服务器处理密集型应用的性能;C:以访问数据库服务器特有的功能特性;D:易于维护;2 存储过程的程序结构 一个完整的使用储存过程的应用程序由两部分组成:一是储存过程本身,它被存放在数据库服务器端并数据库服务器上运行;二是对存储过程进行调用的客户端应用程序,它在客户端上运行。客户端应用程序与服务器端储存过程分别运行在两个不同的进程空间中,并且有不同的功能划分。 客户端应用程序的主要功能是: A:关数据结构和主变量定义、分配并初始化存储空间; B:与数据库进行连接; C:通过SQL CALL语句调用存储过程 D:完成事务的提交(COMMIT)和回滚(ROLLBACK)(注:除非采用分布式工作单元,服务器端的存储过程也可以完成事务的提交和回滚); E:执行CONNECT RESET语句; 服务器端储存过程的主要功能是: A:接收客户端应用程序传送的SQLCA和SQLDA等数据库结构; B:作为与客户端应用程序相同的事务在数据库服务器上运行; C:向客户端应用程序返回SQLCA和其它输出数据;3 客户端应用程序 客户端应用程序在使用CALL语句调用存储过程之前必须先执行几个步骤。首先,必须连接数据库,声明、分配并初始化SQLDA结构或宿主变量。 提示:不要在数据库服务器上分配这些变量结构。数据库管理系统将根据客户端应用程序中的结构在服务器端自动分配所需的存储。 客户端应用程序必须保证在调用存储过程之前已建立了数据库连接,否则,将会产生错误。3.1 CALL 语句 客户端应用程序可通过CALL语句向服务器发出存储过程调用请求。CALL的语法格式如下所示: CALL {(主变量1,…,主变量N)|USING DESCRIPTION 描述符名} CALL语句的作用是将调用参数通过一个SQLDA数据结构从客户端传送给服务器端的存储过程,存储过程执行后再将输出结果通过同一个SQLDA返回给客户端应用程序。1.有关被调用存储过程的名称的规定1)在客户端应用程序中,被调用的存储过程的名称既可以直接给出,也可以通过一个主变量给出。2)如果被调用的存储过程的名称是直接给出的,则它必须是一个通常的标识符(identifier)并且长度不能超过254个字节。由于通常的标识符中不能含有空格或其它特殊字符,所以,如果被调用的存储过程的名称中必须包含有空格或其它特殊字符时,则只能使用主变量来给出其名称。3)如果是通过主变量给出被调用的存储过程的名称,则使用的主变量必须是一个具有长度属性的字符串型的变量,并且其长度不能超过254个字节。4)被调用的存储过程的名称可以采用下列几种格式: 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的函数;2.通过宿主变量传递过程调用参数以下是一段通过宿主变量传递过程调用参数的程序例子:EXEC SQL BEGIN DECLARE SECTION;char host_var1[15];float host_var2;short ind_var2;long host_var3;short ind_var3;char procname[254] = “myproc”;EXEC SQL END DECALRE SECTION;strcopy(host_var1,”new data”);host_var2 = 17.6;ind_var2 = 0;ind_var3 = -1;EXEC SQL CALL :procname(:host_var1,:host_var2 :ind_var2,:host_var3 :ind_var3); 如上面的程序段所示,在调用存储过程时,可以通过宿主变量向存储过程传递调用参数。存储过程的调用参数可分为只输入的(input only)、只输出的(output only)和既输入又输出的(both input and output)。如果调用参数没有明确被说明为只输入的(input only)或只输出的(output only),则CALL语句将其缺省处理为既输入又输出的(both input and output)的调用参数。调用参数的输入输出类型由相应的指示符变量确定。对于只输入的(input only)的调用参数其相应指示符变量的值应为0(例如,上面程序段中的host_var2)