《最新嵌入式SQL补充PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新嵌入式SQL补充PPT课件.ppt(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式嵌入式SQLSQL补充补充练习:1.显示显示”王平王平“同同学的学号和电话学的学号和电话2.查询查询“数据库设数据库设计计”课程的任课课程的任课教师工号教师工号3.查询马建平授课查询马建平授课的数据库设计班的数据库设计班中中“王一王一”的成的成绩绩将将SQL访问数据库的能力,与宿主语言的访问数据库的能力,与宿主语言的过程化处理的能力进行综合过程化处理的能力进行综合将将SQL语句嵌入宿主语言中语句嵌入宿主语言中引入变量的使用引入变量的使用 嵌入式嵌入式SQL的实现,有两种方法:的实现,有两种方法:n扩充宿主语言的编译程序,使之能处理扩充宿主语言的编译程序,使之能处理SQL语句;语句;n预处
2、理方式(常用)预处理方式(常用)预处理方式:预处理方式:n将具有前缀的语句,转换成宿主语言的函数调用语句将具有前缀的语句,转换成宿主语言的函数调用语句n由宿主语言的编译器生成目标程序由宿主语言的编译器生成目标程序嵌入式嵌入式SQL执行过程执行过程宿主语言宿主语言 +嵌入嵌入SQLSQL 预处理程序预处理程序 宿主语言宿主语言 +函数调用函数调用 宿主语言编译器宿主语言编译器 宿主语言执行程序宿主语言执行程序 嵌入式嵌入式SQL语句与主语句之间的通信语句与主语句之间的通信数据库与源程序工作单元之间通信主要包括:数据库与源程序工作单元之间通信主要包括:1.向主语言传递向主语言传递SQL语句的执行状
3、态信息,使主语言能够据语句的执行状态信息,使主语言能够据此控制程序流程,主要用此控制程序流程,主要用SQL通信区通信区实现;(实现;(SQLCommunicationArea,简称,简称SQLCA)2.主语言向主语言向SQL语句提供参数,主要语句提供参数,主要用主变量用主变量(hostvariable)实现;)实现;3.将将SQL语句查询数据库的结果交主语言进一步处理,主要语句查询数据库的结果交主语言进一步处理,主要用主变量和游标用主变量和游标(cursor)实现)实现SQL通信区通信区,主变量主变量,游标游标的概念的概念存储设备上的数据库是用存储设备上的数据库是用SQLSQL语句存取的,数语
4、句存取的,数据库和宿主语言程序间信息的传递是通过据库和宿主语言程序间信息的传递是通过共享共享变量变量实现的。实现的。共享变量先由宿主语言程序定义,再用共享变量先由宿主语言程序定义,再用SQL的的DECLARE语句声明,随后语句声明,随后SQL语句就可引用这些语句就可引用这些变量。变量。共享变量共享变量是是SQL和宿主语言的接口。和宿主语言的接口。nSQLSQL规定,规定,SQLSTATESQLSTATE是一个特殊的共享变量,是一个特殊的共享变量,起着解释起着解释SQLSQL语句执行状况的作用,由语句执行状况的作用,由5 5个字符个字符组成的字符数组的标准(组成的字符数组的标准(ISOISO)返
5、回信息码。返回信息码。nSQLSTATE:SQLSTATE:n00000:00000:成功成功n非非0:0:出错出错n02000:02000:未找到元组未找到元组n根据根据SQLSTATESQLSTATE的值可以控制程序的流向。的值可以控制程序的流向。10.2嵌入式嵌入式SQL的使用规定的使用规定1、在程序中要区分、在程序中要区分SQL语句与宿主语言语句语句与宿主语言语句嵌入的嵌入的SQL语句以语句以EXEC SQL开始,以分号开始,以分号(;)或或END_EXEC结束(根据具体语言而定)结束(根据具体语言而定)EXEC SQL END_EXEC举例:EXEC SQL delete from
6、swhere sno=s10;2、允许嵌入的、允许嵌入的SQL语句引用宿主语言的程序变量(共享变量)语句引用宿主语言的程序变量(共享变量),但有以下规定:,但有以下规定:(1)、宿主变量出现于、宿主变量出现于SQL语句中时,语句中时,前面加(前面加(:)以区别数)以区别数据库变量(列名)。据库变量(列名)。宿主变量可出现在宿主变量可出现在SQL的数据操纵语句中可出现的数据操纵语句中可出现常数常数的任的任何地方,何地方,select等语句的等语句的into字句中。字句中。例:例:EXEC SQL select SNAME,AGE into :stu_name,:age from s where
7、SNO=:input_no;(2).(2).共享变量的用法:先由宿主语言的程序定义,共享变量的用法:先由宿主语言的程序定义,并用并用SQLSQL的的DECLAREDECLARE语句说明。语句说明。EXEC SQL BEGIN DECLARE SECTIONint stu_no;char stu_name30;int age;char SQLSTATE6EXEC SQL END DECLARE SECTION EXEC SQL select sname,age into :stu_name,:age from s where sno=:stu_no;(3)SQL(3)SQL的集合处理方式与宿主语
8、言单记录处理方式之的集合处理方式与宿主语言单记录处理方式之间的协调间的协调SQL:一次一集合。:一次一集合。C语言:一次一记录。语言:一次一记录。n游标:在查询结果的记录集合中移动的指针。游标:在查询结果的记录集合中移动的指针。若一个若一个SQL语句返回语句返回单个元组,则不用游标。单个元组,则不用游标。若一个若一个SQL语句返回语句返回多个元组,则使用游标多个元组,则使用游标。需要游标的数据操作需要游标的数据操作当当selectselect语句的结果中包含多个元组时,使用游标可语句的结果中包含多个元组时,使用游标可以逐个存取这些元组。以逐个存取这些元组。活动集:活动集:selectselec
9、t语句返回的元组的集合。语句返回的元组的集合。当前行:当前行:活动集中当前处理的那一行。游标即是指向当前行活动集中当前处理的那一行。游标即是指向当前行的指针。的指针。游标分类:游标分类:n滚动游标滚动游标:游标的位置可以来回移动,可在活动集中取任:游标的位置可以来回移动,可在活动集中取任意元组。意元组。n非滚动游标非滚动游标:只能在活动集中顺序地取下一个元组。:只能在活动集中顺序地取下一个元组。n更新游标更新游标:数据库对游标指向的当前行加锁,当程序读下:数据库对游标指向的当前行加锁,当程序读下一行数据时,本行数据解锁,下一行数据加锁。一行数据时,本行数据解锁,下一行数据加锁。需要游标的数据操
10、作需要游标的数据操作n游标的使用方法:游标的使用方法:1 1、定义游标、定义游标:定义一个游标,使之对应一个定义一个游标,使之对应一个selectselect语句。语句。nEXEC_SQL EXEC_SQL DECLARE DECLARE CURSORCURSOR FOR FOR SELECT END_EXEC END_EXEC2 2、打开游标打开游标:打开一个游标,执行游标对应的打开一个游标,执行游标对应的查询,结果集合为该游标的活动集。查询,结果集合为该游标的活动集。nEXEC SQL EXEC SQL OPEN OPEN /执行查询执行查询 END_EXEC END_EXEC /定位于第
11、一行的前一行定位于第一行的前一行需要游标的数据操作需要游标的数据操作3 3、游标推进语句:在活动集中将游标移到特定的、游标推进语句:在活动集中将游标移到特定的行,并取出该行数据放到相应的宿主变量中行,并取出该行数据放到相应的宿主变量中 EXEC SQL FETCH FROM EXEC SQL FETCH FROM INTO INTO END_EXEC END_EXEC4 4、游标关闭语句、游标关闭语句 :关闭游标,释放活动集及其所:关闭游标,释放活动集及其所占资源,使它不再和查询结果相联系。需要再使占资源,使它不再和查询结果相联系。需要再使用该游标时,执行用该游标时,执行openopen语句。
12、语句。EXEC SQL CLOSE EXEC SQL CLOSE END_EXEC END_EXEC10.3嵌入式嵌入式SQL的使用技术的使用技术1 1、不需要游标的、不需要游标的SQLSQL操作操作如果是如果是insertinsert、deletedelete和和updateupdate,加上前缀,加上前缀EXEC SQL EXEC SQL 和和END_EXEC END_EXEC 就可以嵌入在宿主语言中使用,对于就可以嵌入在宿主语言中使用,对于selectselect语句,如果已知结果为单元组,可以直接嵌入在主程序语句,如果已知结果为单元组,可以直接嵌入在主程序中使用。中使用。1 1)结果是
13、一个元组的)结果是一个元组的selectselect语句语句EXEC SQL select SNAME,AGEEXEC SQL select SNAME,AGE into :stu_name,:age into :stu_name,:age from s from s where sno=s10;where sno=s10;不需要游标的数据操作不需要游标的数据操作ninsert语句 EXEC SQL insert into s values(:stu_no,:stu_name,:stu_age,:stu_sex);ndelete语句 EXEC SQL delete from s values
14、age:stu_age;nupdate语句EXEC SQL update sc set grade=grade+:raisewhere c#in(select c#from c where cname=MATHS);(2)涉及游标的涉及游标的SQLDML语句语句(DataManipulationLanguage)数据操纵语言)数据操纵语言 1 1)selectselect语句的使用方式语句的使用方式当当selectselect语句查询结果是语句查询结果是多个元组多个元组时,要用游标把多个元时,要用游标把多个元组一次一次的传递给宿主语言程序处理;具体过程:组一次一次的传递给宿主语言程序处理;具体
15、过程:1 1、先定义一个游标与某个、先定义一个游标与某个selectselect语句对应。语句对应。2 2、打开游标、打开游标(活动状态活动状态),此时游标指向第一个元组之前。,此时游标指向第一个元组之前。3 3、每执行一次、每执行一次fetchfetch语句,游标指向下一个元组,并把其语句,游标指向下一个元组,并把其值送到共享变量,供程序处理,如此重复,直到所有查询值送到共享变量,供程序处理,如此重复,直到所有查询结果处理完毕。结果处理完毕。4 4、最后用、最后用closeclose语句关闭游标。语句关闭游标。关闭的游标可以被重新打开,与新的查询结果相关闭的游标可以被重新打开,与新的查询结果
16、相联系,没有打开前,不能使用。联系,没有打开前,不能使用。2)2)对游标指向元组的修改或删除操作对游标指向元组的修改或删除操作在游标处于活动状态时,可以修改或删除游标指向的元组。在游标处于活动状态时,可以修改或删除游标指向的元组。While(1)Exec sql Fetch FROM scx into:sno,:cno,:gif (NO_MORE_TUPLES)break;if(g60)Exec sql DELETE FROM sc WHERE CURRENT OF scx;elseif (g70)EXEC SQL UPDATE sc SET grade=70 WHERE CURRENT OF
17、 scx;g=70;printf(“sno:%s,cno:%s:%d”,sno,cno,g);(3)(3)卷游标的定义和使用卷游标的定义和使用n上面的游标,在推进时只能沿查询结果中元组顺序从头到尾上面的游标,在推进时只能沿查询结果中元组顺序从头到尾一行行推进,并且不能返回,不便。一行行推进,并且不能返回,不便。nSQLSQL提供了卷游标,在推进卷游标时可以进退自如。提供了卷游标,在推进卷游标时可以进退自如。n1 1)卷游标的定义)卷游标的定义:EXEC SQL DECLARE SCROLL CURSOR FOR END_EXECn卷游标卷游标的打开和关闭与以前一样。的打开和关闭与以前一样。n2 2)卷游标的推进语句:)卷游标的推进语句:EXEC SQL FETCH NEXT|PRIOR|FIRST|LAST|CURRENT|RELATIVE N|ABSOLUTE M INTO END_EXECnRelative 3:表示把游标从当前位置推进3行;nRelative 5:表示把游标从当前位置返回5行;nAbsolute 4:表示把游标移向查询结果的第4行;nAbsolute 6:表示把游标移向查询结果的倒数第6行;结束语结束语谢谢大家聆听!谢谢大家聆听!29