db2静态sql和动态sql的比较与实践

db2静态sql和动态sql的比较与实践

ID:22857966

大小:98.00 KB

页数:12页

时间:2018-11-01

db2静态sql和动态sql的比较与实践_第1页
db2静态sql和动态sql的比较与实践_第2页
db2静态sql和动态sql的比较与实践_第3页
db2静态sql和动态sql的比较与实践_第4页
db2静态sql和动态sql的比较与实践_第5页
资源描述:

《db2静态sql和动态sql的比较与实践》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、DB2静态SQL和动态SQL的比较与实践(转)SQL语言作为标准的查询语言,几乎被所有的数据库管理系统(DBMS)所支持,并成为国际标准。标准的SQL语言一般包括三类,即DDL(DataDefinitionLanguage,数据描述语言)、DML(DataManipulationLanguage,数据操纵语言)和DCL(DataControlLanguage,数据控制语言)。通过这些标准的SQL语句,使得各种数据库能以一种较为统一的方式被访问。DB2(本文以下专指DB2UDBforLinux,Unix和Windows版本)允许用户通过多种编程接口发送SQL语句到数据库引擎,然后由引擎统一编译并

2、且运行。SQL语句从编译和运行的角度可以分为两种,静态SQL和动态SQL,这两种SQL在使用方式、运行机制和性能表现等方面各有特点:·静态SQL:静态SQL语句一般用于嵌入式SQL应用中,在程序运行前,SQL语句必须是确定的,例如SQL语句中涉及的列名和表名必须是存在的。静态SQL语句的编译是在应用程序运行前进行的,编译的结果会存储在数据库内部。而后程序运行时,数据库将直接执行编译好的SQL语句,降低运行时的开销。·动态SQL:动态SQL语句是在应用程序运行时被编译和执行的,例如,使用DB2的交互式工具CLP访问数据库时,用户输入的SQL语句是不确定的,因此SQL语句只能被动态地编译。动态SQ

3、L的应用较多,常见的CLI和JDBC应用程序都使用动态SQL。表1列举了静态SQL和动态SQL的比较结果。表1.静态SQL和动态SQL的比较静态SQL动态SQLSQL语句直接嵌入到宿主编程语言,程序需要预编译处理这些嵌入的SQL语句SQL语句一般作为宿主语言的变量出现。嵌入式动态SQL应用需要预编译,非嵌入式SQL应用则无需预编译SQL语句在程序被编译时已知,涉及的数据库对象已存在SQL语句在程序被编译时未知,涉及的数据库对象可以是运行时才创建的SQL语句在程序运行前被编译SQL语句在程序运行时被编译SQL语句的编译结果在DB2的目录(catalog)中持久化保存SQL语句的编译结果缓存在数据

4、库的内存里运行时仅读取目录(catalog)运行时编译SQL语句需对目录(catalog)加锁SQLSQL语句的优化是根据编译时的数据库统计信息进行的,不能完全反映运行时的情况语句的优化是根运行时的数据库统计信息进行的对SQL语句所访问的数据对象的权限检查是在绑定时进行的对SQL语句所访问的数据对象的权限检查是在运行时进行的权限控制的粒度是包(package,一组SQL语句的编译结果),用户仅需要访问包的权限权限控制的粒度是SQL语句,用户需要具有访问SQL语句中每个数据对象的权限如果SQL语句中的对象被修改,如DDL执行,整个包都需要重新绑定当SQL语句中的对象被修改时,仅执行过的语句在下次

5、运行时需要重新编译根据编程方法的不同,DB2的应用程序开还可以分为嵌入式SQL编程和非嵌入式编程:·嵌入式SQL编程将SQL语句嵌入到宿主语言(host)的程序中,例如C/C++程序。因为宿主语言不识别SQL语句,先要对程序进行预编译,把SQL语句转变为对DB2服务的调用,并重写源代码,最后再使用宿主语言的编译器对应用程序进行编译。嵌入式SQL都需要被绑定到特定的数据库中,可分为嵌入式静态SQL和嵌入式动态SQL。·非嵌入式应用程序不需要预编译,且方法较多,如CLI、JDBC、ODBC、ADO.NET等等,这些方法中都使用动态SQL。表2列举了常见的DB2编程接口。表2.DB2的编程接口一览编

6、程接口静态/动态是否为嵌入式嵌入式SQL静态和动态是DB2CLI动态否SQLJ静态是JDBC动态否ADO.NET,OLEDB动态否PerlDBI动态否PDO(PHP数据对象)动态否在下面的几个章节中,我们将陆续从使用角度上描述静态和动态SQL在各种编程接口中的应用,并运用一些实例来介绍在具体的场景中如何选择。静态SQL应用嵌入式静态SQL无论是嵌入式静态SQL还是嵌入式动态SQL,都需要先进行预编译,并绑定到特定的数据库。DB2的嵌入式SQL应用程序支持以下几种语言:C,C++,COBOL,FORTRAN和REXX™。对嵌入式静态SQL而言,只能使用编译时确定的SQL语句和访问编译时已经存在的

7、数据库对象。清单1是一个查询表的例子,使用C语言:清单1.嵌入式静态SQL的C语言片断//test.sqcEXECSQLINCLUDESQLCA;EXECSQLBEGINDECLARESECTION;sqlint32t_seq=0;chart_name[64]={0};EXECSQLENDDECLARESECTION;...t_seq=5;EXECSQLSELECTc_nameINTO:t_nam

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。