- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式SQL编程-Read
嵌入式SQL编程
嵌入式 SQL 编程简介
结构化查询语言和嵌入式 SQL
结构化查询语言(SQL)是用于操纵数据库对象及其所包含数据的标准化语言。SQL 由多个不同的用以定义、更改和销毁数据库对象以及添加、更新、删除和检索数据值的语句构成。但是,SQL 是非过程的,所以它不是一种通用的编程语言。(SQL 语句是由 DB2 Database Manager,而非操作系统来执行的。)因此,数据库应用程序通常是通过将带有数据存储、操纵和检索等 SQL 功能的高级编程语言的决策和序列控制相结合来开发的。可用多种方法将 SQL 与高级编程语言结合起来,但最简单的方法就是将 SQL 语句直接嵌入用于创建应用程序的源代码文件中。该技术被称作 嵌入式 SQL 编程。
使用嵌入式 SQL 开发应用程序其中的一个缺点就是,高级编程语言编译器不认识源代码文件中碰到的 SQL 语句,因而也无法解释它们。因此,在对包含了嵌入式 SQL 的源代码文件进行编译以产生应用程序之前,必须对它们进行预处理(使用称作 预编译 的过程)。为了便于进行预处理,在高级编程语言源代码文件中,所编码的每个 SQL 语句必须以关键字 EXEC SQL 为前缀并且以分号(在 C/C++ 或 FORTRAN 中)或关键字 END_EXEC 结束(在 COBOL 中)。当预处理器(称作 SQL 预编译器的特殊工具)碰到这些关键字,就用特定于 DB2 UDB 的函数调用替换随后的文本(直到发现分号(;)或关键字 END-EXEC),用以将指定的 SQL 语句发送给 DB2 Database Manager 进行处理。
同样,DB2 Database Manager 也无法直接使用高级编程语言的变量,而是必须使用称作 宿主变量 的专用变量,以在应用程序和数据库之间移动数据。宿主变量看上去与任何其他高级编程语言变量一样;为了加以区分,必须在名为 声明段(declare section) 的专用区域里定义它们。而且,为了让 SQL 预编译器区分宿主变量和 SQL 语句中的其他文本,对于宿主变量的所有引用都必须以冒号(:)开头。
静态 SQL
静态 SQL 语句是一种可以在开发时在应用程序中进行硬编码的 SQL 语句,因为关于其结构以及它打算要与之交互的对象(例如表、列和数据类型)的信息事先就知道。由于在开发时就知道静态 SQL 语句的细节,所以分析语句以及选择使用最优的数据访问方案以执行该语句等工作将由 DB2 优化器在开发过程中执行。由于其操作形式已存储在数据库(作为一个 包)中,并且无需在应用程序运行时来生成,所以静态 SQL 语句可快速执行。
该方法的不足就是在执行之前,必须准备好所有的静态 SQL 语句(换言之,必须生成其访问方案并存储在数据库中)。而且,在运行时不能更改静态 SQL 语句,并且每个使用静态 SQL 的应用程序都必须将其操作包 绑定 到该应用程序将要与之交互的每一个数据库上。此外,因为静态 SQL 应用程序需要提前知道数据库对象,所以在开发了应用程序之后修改这些对象可能产生意想不到的结果。
以下是静态 SQL 语句的示例:
SELECT COUNT(*) FROM EMPLOYEE
UPDATE EMPLOYEE SET LASTNAME = Jones WHERE EMPID = 001
SELECT MAX(SALARY), MIN(SALARY) INTO :MaxSalary, :MinSalary FROM EMPLOYEE
静态 SQL 语句通常较适合于对一组已知的数据库对象执行预定义操作的高性能应用程序。
动态 SQL
虽然静态 SQL 语句相对易于包含于应用程序之中,但其使用有些受限,因为必须事先知道它们的格式。与之相对的是,动态 SQL 语句要灵活得多,因为它们可以在应用程序运行时进行构造;关于动态 SQL 语句的结构及其打算要与之进行交互的对象的信息也不必事先知道。此外,因为动态 SQL 语句没有预编码的固定格式,所以在执行语句时,可以更改它们所引用的数据对象。
即使动态 SQL 语句通常都比静态 SQL 语句更加灵活,但是将其包含于应用程序中则常常更为复杂。因为分析语句以及选择使用最优的数据访问方案以执行该语句等工作是在应用程序运行时执行的(同样由 DB2 优化器完成),所以动态 SQL 语句的执行时间比与之对等的静态 SQL 更长。(由于动态 SQL 语句可以利用应用程序运行时获得的数据库统计信息,所以也存在动态 SQL 语句比其等效的静态 SQL 语句执行更快的情况,但是那些都是例外而非标准情况。)
以下是动态 SQL 语句的示例:
SELECT COUNT(*) FROM ?
INSERT INTO EMPLO
文档评论(0)