ESQL 资料(完全版)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ESQL 资料(完全版)
esql资料(完全版)
esql/c资料(完全版)
第六章嵌入式sql(e-sql)概述3第一节什么就是内嵌sql语言?31.1内嵌sql程序的共同组成元素31.2什么就是静态sql和动态sql?41.3什么就是sqlca?41.4什么就是sqlda?5
第二节sybasesqlserver嵌入式sql语言52.1一个嵌入sql语言的简单例子52.2嵌入sql的处理过程62.3嵌入sql语句总览72.3.1宿主变量72.3.2连接数据库122.3.3数据的查询和修改132.3.4游标的使用132.3.5sqlca152.3.6whenever162.3.7批处理182.3.8事务182.4动态sql语句182.4.1动态修改192.4.2动态游标202.4.3sqlda23
第三节ibmdb2内嵌sql语言353.1一个直观示例353.2内嵌sql语句373.2.1宿主变量373.2.2单行查阅393.2.3多行查阅39
3.2.4插入、删除和修改操作403.2.5sqlca433.2.6事务45
3.3db2的内嵌sql程序处理过程463.4db2的动态sql内嵌语句533.
4.1基本方法533.4.2动态游标553.4.3sqlda55
第四节oracle数据库的嵌入sql语言66
4.1基本的sql语句664.1.1宿主变量和命令符令664.1.2查阅684.1.3修正数据684.1.4游标684.2内嵌pl/sql714.3动态sql语句72
4.3.1oracle动态sql语句的一些特点724.3.2使用动态sql的四种方法
724.3.3sqlda75
第五节informix的内嵌sql/c语言895.1一个直观的入门例子895.2宿主变量91
5.3嵌入sql的处理过程965.4动态sql语言965.4.1sqlda97
第六节microsoftsqlserver7嵌入式sql语言1056.1一个内嵌sql语言的直观例子1056.2内嵌sql的处理过程1066.3内嵌sql语句112
6.3.1声明嵌入sql语句中使用的c变量1126.3.2连接数据库1156.3.3数据的查询和修改1156.3.4游标的使用1166.3.5sqlca1176.3.6whenever1186.4动态sql语句1196.4.1动态修改1196.4.2动态游标1206.4.3sqlda122
6.4.4describe语句1306.5api130
第六章嵌入式sql(e-sql)简介第一节什么是嵌入sql语言?
sql就是一种双重式语言,它既是一种用作查阅和更新的交互式数据库语言,又就是一种应用程序展开数据库出访时所实行的编程式数据库语言。

sql语言在这两种方式中的大部分语法就是相同的。

在撰写出访数据库的程序时,必须从普通的编程语言已经开始(如c语言),再把sql重新加入至程序中。

所以,嵌入式sql语言就是将sql语句轻易内嵌至程序的源代码中,与其他程序设计语言语句混合。

专用的sql进度表编译程序将内嵌的sql语句切换为能够被程序设计语言(如c语言)的编译器辨识的函数调用。

然后,c编译器编程源代码为可执行程序。

各个数据库厂商都采用嵌入sql语言,并且都符合ansi/iso的标准。

所以,如果采用合适的嵌入sql语言,那么可以使得你的程序能够在各个数据库平台上执行(即:源程序不用做修改,只需要用相应数据库产品的预编译器编译即可)。

当然,每个数据库厂商又扩展了ansi/iso的标准,提供了一些附加的功
能够。

这样,也使每个数据库产品在内嵌sql方面存有一些区别。

本章的目标就是,对所有的数据库产品的内嵌sql搞一个直观、新颖的了解。

当然,嵌入sql语句完成的功能也可以通过应用程序接口(api)实现。

通过api的调用,可以将sql语句传递到dbms,并用api调用返回查询结果。

这个方法不需要专用的预编译程序。

1.1嵌入sql程序的组成元素
我们以ibm的db2内嵌sql为基准,去看一看内嵌sql语句的共同组成元素。

例1、连接到sample数据库,查询lastname为johnson的firstname信息。

#include#include#include#includeutil.h#include
execsqlincludesqlca;(1)main(){
execsqlbegindeclaresection;(2)
charfirstname[13];charuserid[9];charpasswd[19];
execsqlenddeclaresection;execsqlconnecttosample;(3)
execsqlselectfirstnmeinto:firstname(4)fromemployee
wherelastname=johnson;(4)
printf(firstname=%s\\n,firstname);execsqlconnectreset;(5)return0;}
上面是一个简单的静态嵌入sql语句的应用程序。

它包括了嵌入sql的主要部分:
(1)中的includesqlca语句定义并叙述了sqlca的结构。

sqlca用作应用程序和数据库之间的通讯,其中的sqlcode回到sql语句继续执行后的结果状态。

(2)在begindeclaresection和enddeclaresection之间定义了宿主变量。

宿主变量可被sql语句引用,也可以被c语言语句引用。

它用于将程序中的数据通过sql语句传
给数据库管理器,或从数据库管理器接收查询的结果。

在sql语句中,主变量前均有
d:‖标志以示区别。

(3)在每次出访数据库之前必须搞connect操作方式,以相连接至某一个数据库上。

这时,必须确保数据库实例已经启动。

(4)是一条选择语句。

它将表employee中的lastname为djohnson‖的行数据的firstname查出,并将它放在firstname变量中。

该语句返回一个结果。

可以通过游标返
回多个结果。

当然,也可以包含update、insert和delete语句。

(5)最后断开数据库
的连接。

从上基准窥见,每条嵌入式sql语句都用execsql已经开始,说明它就是一条sql语句。

这也就是说进度表编译器在execsql和d;‖之间就是内嵌sql语句。

如果一条嵌入
式sql语句挤占多行,在c程序中可以用续行符d\\‖。

1.2什么是静态sql和动态sql?
内嵌sql语言,分成静态sql语言和动态语言两类。

静态sql语言,就是在编程时已
经确认了提及的表和列于。

宿主变量不发生改变表和列于信息。

可以采用主变量发生改变
查阅参数值,但是无法用主变量替代表名或榜上有名。

动态sql语言就是:无此编程时确
认sql的表和列于,而是使程序在运转时提供更多,并将sql语句文本托付给dbms继续
执行。

静态sql语句在编程时已经分解成继续执行计划。

而动态sql语句,只有在继续执
行时才产生继续执行计划。

动态sql语句首先继续执行prepare语句建议dbms分析、证
实和优化语句,并为其分解成继续执行计划。

dbms还设置sqlcode以说明语句中辨认出的错误。

当程序执行回去dprepare‖语句后,就可以用execute语句继续执行继续执行计划,并设置sqlcode,以说明顺利完成状态。

1.3什么就是sqlca?
应用程序执行时,每执行一条sql语句,就返回一个状态符和一些附加信息。

这些信
息反映了sql语句的执行情况,它有助于用户分析应用程序的错误所在。

这些信息都存放
在sqlca.h的sqlca结构中。

如果一个源文件中包含sql语句,则必须要在源程序中定义
一个sqlca结构,而且名为sqlca。

最简单的定义方法是在源文件中加入一些语句:execsqlincludesqlca.h。

每个数据库产品都提供了sqlca结构。

1.4什么就是sqlda?
我们知道,动态sql语句在编译时可能不知道有多少列信息。

在嵌入sql语句中,这
些不确定的数据是通过sqlda完成的。

sqlda的结构非常灵活,在该结构的固定部分,指
明了多少列等信息,在该结构的后面有一个可变长的结构,说明每列的信息。

在从数据库
获得数据时,就可以采用sqlda来获得每行的数据。

各个数据库产品的sqlda结构都不完
全相同。

第二节sybasesqlserver嵌入式sql语言2.1一个嵌入sql语言的简单例子
我们首先来看一个直观的嵌入式sql语言的程序(c语言):用sa(口令为password)相连接数据库服务器,并将所有书的价格减少10%。

这个例子程序如下:基准1、
/*建立通讯区域*/execsqlincludesqlca;main(){
/*声明宿主变量*/
execsqlbegindeclaresection;charuser[30],passwd[30];
execsqlenddeclaresection;/*错误处理*/
execsqlwheneversqlerrorcallerr_p();/*连接到sqlserver服务器
*/printf(\\npleaseenteryouruserid);gets(user);printf(\\npassword);gets(passwd);
execsqlconnect:useridentifiedby:passwd;execsqlusepubs2;
return(0);}
/*错误处理程序*/err_p(){
printf(\\nerroroccurred:code%d.\\n%s,\\sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);}
从上面这个例子,我们窥见内嵌sql的基本特点就是:
1、每条嵌入式sql语句都用execsql开始,表明它是一条sql语句。

这也是告诉预
编译器在execsql和d;‖之间是嵌入sql语句。

2、如果一条嵌入式sql语句挤占多行,在c程序中可以用续行符d\\‖,在fortran
中必须存有续行符。

其他语言也存有适当规定。

3、每一条嵌入sql语句都有结束符号,如:在c中是d;‖。

4、嵌入sql语句的关
键字不区分大小写。

5、可以采用d/*….*/‖去嵌入注解。

也可以采用d--‖去嵌入注解。

2.2内嵌sql的处理过程
嵌入sql的处理过程如下图所示:
图6-1sybasesqlserver内嵌sql程序处理过程
嵌入sql程序的后缀为.cp。

嵌入sql处理的第一步是预编译。

预编译器(cpre.exe)处理过程分为两个小步:
第一小步:语法分析。

检查内嵌sql语句的语法正确性。

第二小步:增加一些预编译器变量,并注释了所有的嵌入的sql语句,将嵌入sql语
句转换为对client-library中函数的调用(注意:在连接时,编译后的代码需要使用
client-library中的库文件)。

如果在编译时,设置一些选项,则生成存储过程。

预编译
后可能产生3个文件:一个c文件(肯定产生),一个列表文件(需要在编译时设置选项,才能产生)和一个isql脚本文件(需要在编译时设置选项,才能产生)。

列表文件包含
了输入文件的源语句和一些警告信息和错误信息。

isql脚本文件包含了预编译器产生的存储过程脚本文件。

这个存储过程是用t-sql写的。

总之,预编译器的处理方法是,注释了
嵌入的sql语句,用一些特定的函数代替。

第二步就是c源程序的编程和链接。

cl就是编程和链接命令的内置命令,编程的结果就是产生.obj,在链接时,将c的系统库和sqlserver提供更多的库文件同目标文件相连
接在一起。

最后分解成.exe。

也可以采用setlib语句设置库文件的环境信息。

2.3嵌入sql语句总览
除了print、readtext和writetext外,大多数的transact-sql语句都可以在内嵌
sql中采用。

内嵌sql语句的语法为:dexecsql[atconnection_name]sql_statement;‖。

那么,你可以用transact-sql语句去替代sql_statement就可以顺利完成内嵌sql的撰写。

(同t-sql较之,内嵌sql提供更多了:自动数据初始化、动态sql、sqlca数据结
构等功能。


但是,也有一些嵌入式sql所特有的语句,有些嵌入式sql语句的名字同transact-sql语句相同,但是语句的语法有所不同。

嵌入sql语句应该包含五个步骤:
1)、通过sqlca创建应用程序和sqlserver的sql通信区域。

2)、声明宿主变量。

相关文档
最新文档