龙源期刊网 http://www.qikan.com.cn
DB2嵌入式静态SQL应用与实践
作者:陈景彦
来源:《电脑知识与技术》2012年第12期
摘要:随着计算机技术的飞速发展,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开发环境
龙源期刊网 http://www.qikan.com.cn
使用文本编辑器或者集成开发环境(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绑定
龙源期刊网 http://www.qikan.com.cn
创建程序句过程中,数据库管理器在执行程序时会调用这些程序包,为执行提供访问数据策略与路径。在预编译时指定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宿主变量声明与使用