DB2嵌入式静态SQL应用与实践

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:allpass001
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:随着计算机技术的飞速发展,DB2以其具有的通用性与高效运行的巨大优势渗透到各行各业中,面对越来越大的数据信息处理这一问题,如何提高效率、避免庞大的数据库系统被重复编译,增强应用时的可维护性,使得数据库对每条SQL语句可以先择最优的运行。以下从理论出发,结合例程,阐述了静态SQL的应用。
  关键词:嵌入式;静态SQL;游标
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)12-2667-04
  DB2 Embedded Static SQL Application and Practice
  CHEN Jing-yan
  (Medical College of Shantou University, Shantou 515041, China)
  Abstract:With the rapid development of computer technology, with the DB2 for its versatility and efficient operation of the great advan tages of penetration into all walks of life, in the face of increasing data and information to deal with this issue, how to improve efficiency, to avoid a huge databaserepeat the compilation, and enhance the maintainability of the application, making the database for each SQL state ment, you can choose the optimal operation. The following from the theory, combined with the routine, described the application of static SQL.
  Key words:embedded; static SQL; cursor
  1概述
  一个嵌入式SQL应用程序文件就是一个含有SQL语句,且带有特殊扩展名的文该文件。在开始进行嵌入式SQL应用程序开发前,首先需要了解如何把这样一个文件转化成宿主语言编译器可以识别和处理的格式,如何同数据库服务器进行交互、对数据进行查询修改和删除等操作,以及如何构建可执行的程序,文章源代码均用C语言。
  2构建嵌入式SQL应用程序过程
  建立一个嵌入式SQL应用程序前,我们应对其用发中常用的基本概今有一定了解,其具体步骤分为:
  2.1开发环境
  使用文本编辑器或者集成开发环境(IDE)编辑源文件。
  2.2预编译
  在程序文件编辑完成后,应预编译每个连接到数据库的源程序文件。无论是嵌入式静态SQL还是嵌入式动态SQL,都需要先进行预编译,并绑定到特定的数据库。它将源文件中的SQL语句注释掉,并把SQL语句替换成DB2运行时的API调用,这些API调用是源语言编译器能够理解的函数调用,预编工作由预编译器来完成。
  预编译命令:
  Precompile filename [参数名可用数值]…
  PREP filename [参数名可用数值]…
  如创建一个默认名为test.c的新C源文件,同时会生成一个名为test.bnd的绑定文件。其在DB2窗口下执行命令为:
  DB2 PREP test.sqc BINDFILE
  常用参数列表如表1。
  2.3编译
  使用主语主编译修改后的源文件,以及其他不包含SQL语句文件。
  2.4链接
  将编译生成的目标文件与DB2链接到主语言库,从而产生一个可执行的文件。
  
  2.5绑定
  创建程序句过程中,数据库管理器在执行程序时会调用这些程序包,为执行提供访问数据策略与路径。在预编译时指定PACKAGE选项隐含的完成;或者用BIND命令通过预编译产生的绑定文件显性的完成。
  BIND其绑定命令格式为:
  BIND filename [参数名数值]…
  例如将名为test.bnd绑定到数据库中,其在DB2窗口下执行命令为:
  DB2 BIND test.bnd
  预编译为每一个需要独立预编译的源代码模块创建一个程序包。如果有4个源文件,这4个源文件都需要预编译,那么就要创建4个程序包或者4个绑定文件。默认方式是,每一个程序包的名字与后缀.bnd的源文件名字相同,但只包含前8个字符。如果新建的程序包名字与已存在于数据库中的程序包名称相同,新的程序包将替换原先存在的程序包,要显性的指定一个不同的程序包名称,必须执行PREK命令时使用PACKAGE USING选项。
  3嵌入式静态SQL
  3.1静态SQL程序的结构与特点
  静态SQL是指嵌入在宿主语言中的SQL语名在预编译时完全知道。其特点如下:
  1)SQL语句直接嵌入到宿主编程语言,程序需要预编译处理这些嵌入的SQL语句
  2)SQL语句在程序被编译时已知,涉及的数据库对象已存在
  3)SQL语句在程序运行前被编译
  4)SQL语句的编译结果在DB2的目录(catalog)中持久化保存运行时仅读取目录(catalog)
  5)SQL语句的优化是根据编译时的数据库统计信息进行的,不能完全反映运行时的情况
  6)对SQL语句所访问的数据对象的权限检查是在绑定时进行的权限控制的粒度是包(package,一组SQL语句的编译结果),用户仅需要访问包的权限
  7)如果SQL语句中的对象被修改,如DDL执行,整个包都需要重新绑定
  3.2宿主变量声明与使用
  通常方法声明的变量不能被SQL语句直接引用,以另一种特殊的方式在宿主语言程序模块中声明,必须在BEGIN DECLARE SECTION和END DECLARE SECTION程序段中定义。以下程序显示了在C语言中声明宿主变量的例子:
  EXEC SQL BEGIN DECLARE SECTION;
  short mgt_level=100,age=30;
  double bonus;
  char char1;
  char emp_name[16];
  short nul_ind;
  EXEC SQL END DECLARE SECTION;
  引用宿言变量的程序:
  EXEC SQL FETCH cursor1 INTO :bonus;
  printf("bonus=%f ",bonus);
  3.3指示符变量的定义与使用
  与宿主变量定义方法相同,在BEGIN DECLARE SECTION和END DECLARE SECTION之间定义。并且数据类型与SQL数据类型SMALLINT对应,在C语言中为short类型。在INSERT语句句用宿主变量,其需要嵌入的SQL语句为:
  INSERT INTO TEMPTABLE(EMPNO,LASTNAME)
  VALUES(‘000190’,‘JACK’)
  又如: EXEC SQL INSERT INTO TEMPTABLE(EMPNO,LASTNAME)
  VALUES(:empno, :name);
  第一条SQL语句可以在CLP中发出,它也可以嵌入到应用程序中,但是它每一次只能插入一行值,如果要插入不同的值就要重新输入,程序过程也要修改。第二条SQL语句只能嵌入在程序中,每一次执行需要用户通过其他代码指定新值给宿主变量empno和name,宿主变的量的作用是将用户指定的值传递给VALUES子句。可以实现输入多行值。
  宿主变量使用方法如下例子: CREATE TABLE TEMPTABLE( EMPNO CHAR(6) NOT NULL,
  LASTNAME VARCHAR(2) NOT NULL, JOBCODE CHAR(2),
  WORKDEPT CHAR(3), NOT NULL,
  PHONENO CHAR(10))
  EXEC SQL
  SELECT JOBCODE, WORKDEPT, PHONENO
  INTO :jc:jci, :dpt, :pho:phoi
  FORM TEMPTABLE WHERE EMPNO=:ID;
  3.4游标的定义与使用
  与宿主变量定义方法相同,在BEGIN DECLARE SECTION和END DECLARE SECTION之间定义。一个应用程序可以有多个游标,但第个游标都要有自己的DECLARE,CURSOR,OPEN,FETCH和CLOSE语句集;处理一个游标涉及到以下几个步骤。
  1)使用DECLARE CURSOR语句声明一个游标。
  2)使用OPEN语句执行查询和创建结果表。
  3)使用FETCH语句每次提取一行结果。
  4)使用DELETE或UPDATE语句处理行(如果需要)。5)使用CLOSE语句关闭游标。
  DECLARE和静态SELECT语句关联
  EXEC SQL DECLARE C1 CURSOR FOR SELECT PNAME,DEPT FROM STAFF WHERE JOB=:host var
  3.5构建嵌入式静态SQL应用程序
  下面通过例程演示了静态SQL语句的使用,实现至多一行的查询,程序查询语句通过SELECT INTO来执行,然后将这数据赋予程序中指定的宿主变量。一条SELECT INTO语句必须只能返回一行或者0行,如果结果集多于一行,就会产生一个错误(SQL CODE -811,SQLSTATE 21000)。
  #include#include#include#include
  #include#include "sqlca.h"#ifdef DB268K
  #
  int main(int argc, char *argv[])
  { EXEC SQL BEGIN DECLARE SECTION; char user_name[18];
  char user_id[12];
  char user_pswd[18];
  EXEC SQL END DECLARE SECTION;
  printf("Sample Cprogram: STATIC ");
  if(argc==1)
  {
  EXEC SQL CONNECT TO sample;
  CHECKERR ("CONNECT TO SAMPLE");}
  else if (argc==3)
  {strcpy (user_id, argv[1]);
  Strcpy (user_pswd, argv[2] );
  EXEC SQL CONNECT TO SAMPLE USER :user_id using :user_pswd;
  CHECKERR("CONNECT TO SAMPLE");
  }
  Else
  {printf(" USAGE: static [user_id user_pswd] ); Return 1;}
  EXEC SQL SELECT FIRSTNME INTO :user_name
  FROM employee
  WHERE LASTNAME=’JOHNSON’; CHECKERR("SELECT statement");
  printf ("First name=%s ",user_name); EXEC SQL CONNECT RESET;
  CHECKERR("CONNECT RESET");
  RETURN 0;
  }
  4结论
  针对嵌入式静态SQL应用与开发,在通常情况下:程序需要处理SQL语句频率较高,压力大或SQL语句较为简单且已知不变的,可以选用静态SQL开发;目前,商业DB2应用程序采用的大多是静态SQL,特点是一次BIND,多次稳定运行,省去了数据库每次寻找ACCESS PATH的OVER HEAD,并且,如果环境迁移,只须重新BIND,而不需要重新编译应用程序或该产品配置。
  参考文献:
  [1]管松,肖振春,张建伟,等.DB2 V9/9.5高级应用开发[M].北京:电子工业出版社,2009.
  [2]刘耸柏.DB2入门与提高[M].北京:清华大学出版社,2002.
  [3]Roger E.Sanders.DB2通用数据库API开发人员指南[M].杨正洪,译.北京:电子工业出版社,2001.
其他文献
目的:探讨针灸配合以日常生活为导向康复训练在脑卒中治疗中的临床效果。方法:选取72例脑卒中患者将其随机分为对照组与观察组,各36例。对照组采用常规治疗与日常生活为导向康
摘要:为了确保计算机信息系统的顺利运行,必须对其进行故障分析,并对其进行维护管理,同时,不断完善计算机系统,以实现其功能和作用的充分发挥。该文通过对计算机信息系统进行故障分析,重点就其故障维护管理的流程、原则、内容以及故障维护管理的实施进行了探讨,希望能为相关领域的研究提供借鉴。  关键词:计算机;信息系统;故障维护;管理  中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2
近年来,我国对猪瘟、口蹄疫、禽流感等重大动物疫病实行强制免疫措施,组建了专业的防疫队伍。随着动物免疫的全面开展,提高了免疫密度,但是疫苗的不良反应也增多,每年在开展生猪口
摘要:计算机技术的发展日新月异,硬盘作为计算机主要的存储媒介之一,其容量、转度、访问时间、传输速率和缓存等基本参数也在飞速增长。但由于硬盘制作工艺磁介质技术的限制,其寿命与稳定不像内存等设备那样好,使用时难免会出现各种各样的问题,影响我们的正常使用和数据安全,这就要求我们了解一些硬盘的基本知识、掌握一些常用的维修方法,便于排除一些常见故障而保证硬盘正常工作。  关键词:硬盘;接口类型;参数;维修方
通过对非精炼船用钢和精炼船用钢连铸坯低倍、船用角钢低倍、金相组织和夹杂物等的分析,在常温和0℃冲击功都能达到要求,若在低温(-20℃、-40℃)非精炼船用钢很难达到要求。
摘要:NOC性能的优劣很大程度上取决与它使用的路由算法,其中包括两大块:输入选择和输出选择。先前的工作大多是研究如何改进输出选择,现论证输入选择对于路由效率的影响,并设计一种行之有效的输入选择机制—基于阻塞程度的输入选择机制。该机制工作在多个输入同时请求同一个输出时,会自动根据上流路由器的阻塞程度优先选通阻塞最严重的输入沟道,从而大大减少了网络的阻塞。实验结果证明,在不同的通信模式下,不论是与确定
旋毛虫病是由毛首目、毛首科(Trichinellidae)的旋毛形线虫(Trichinella spiralis)引起的一种人畜共患寄生虫病。成虫寄生于肠道,幼虫寄生于横纹肌。人和动物采食含有活幼虫
期刊
为评定钢材抗拉强度的测量不确定度,本文以抽油杆钢(D409)为例,建立不确定度计算的数学模型,确定影响试验结果的各项因素,计算各因素所带来的不确定度分量,求出合成标准不确定度,从而得出扩展不确定度,最终给出钢材抗拉强度测量结果的表达式。
通过对实验室现有试验设施的改进和自动控制软件的设计与编制,建立了完善的高温多轴非比例循环加载试验技术。该技术的建立为进行工程材料的高温多轴疲劳特性研究,以及工程热端
[摘要]甘肃省的敦煌市是当今世界著名的文化和旅游名片,是甘肃省实施向西开放战略的主要地区之一,也是甘肃西端的重要门户城市。所有这些条件都决定了,今后要在敦煌连续举办国际文博会,必须在总体发展思路上突出开放问题,特别是要突出向西开放、向丝绸之路国家开放的世界眼光和战略思维,并且建立成功举办敦煌国际文博会的成效机制,完善相关制度和法规体系,争取打造敦煌国际文博会的世界品牌。  [关键词]敦煌;国际文博