嵌入式SQL补充PPT演示文稿

上传人:沈*** 文档编号:61110004 上传时间:2022-03-10 格式:PPT 页数:28 大小:145KB
收藏 版权申诉 举报 下载
嵌入式SQL补充PPT演示文稿_第1页
第1页 / 共28页
嵌入式SQL补充PPT演示文稿_第2页
第2页 / 共28页
嵌入式SQL补充PPT演示文稿_第3页
第3页 / 共28页
资源描述:

《嵌入式SQL补充PPT演示文稿》由会员分享,可在线阅读,更多相关《嵌入式SQL补充PPT演示文稿(28页珍藏版)》请在装配图网上搜索。

1、1第第6章数据库编程章数据库编程嵌入式嵌入式SQL2练习: 显示显示”王平王平“同同学的学号和电话学的学号和电话 查询查询“数据库设数据库设计计”课程的任课课程的任课教师工号教师工号 查询马建平授课查询马建平授课的数据库设计班的数据库设计班中中“王一王一”的成的成绩绩3use ma_regi1Select id, name,phone from m_student where name=王一王一4use ma_regi2Select instructor$id from section where secton.code=(select code from course where title

2、=“数据库设计”)5Select student$id,section$call_no,grade from m_enroll Where m_enroll.section$call_no= (Select call_no from m_section where instructor$id=(select id from m_instructor where name=马建平) and course$code=(select code from m_course where title=数据库设计)6Select student$id,section$call_no,grade from m

3、_enroll where m_enroll.student$id=(select id from m_student where name=王一) and m_enroll.section$call_no= (Select call_no from m_section where instructor$id=(select id from m_instructor where name=马建平) and course$code=(select code from m_course where title=数据库设计)710.1 SQL语言的运行环境语言的运行环境SQL有两种使用方式:有两种使

4、用方式:终端交互方式下使用交互式终端交互方式下使用交互式SQL嵌入在高级语言中使用嵌入式嵌入在高级语言中使用嵌入式SQL(高级语言可以是(高级语言可以是C,PASCAL,COBOL等,称为等,称为宿主语言)宿主语言)8 有些操作对于交互式SQL是不可能的任务不可能的任务。SQL的表达能力相比高级语言有一定的限制,有些数据访问要求单纯使用SQL无法完成。(1)SQL在逐渐增强自己的表达能力,(2)太多的扩展会导致优化能力及执行效率的降低。 非声明性动作实际的应用系统是非常复杂的,数据库访问只是其中一个部件。有些动作如与用户交互、图形化显示数据等只能用高级语言实现。为什么使用嵌入式为什么使用嵌入式

5、SQL?9 将将SQL访问数据库的能力,与宿主语言的访问数据库的能力,与宿主语言的过程化处理的能力进行综合过程化处理的能力进行综合 将将SQL语句嵌入宿主语言中语句嵌入宿主语言中 引入变量的使用引入变量的使用 10嵌入式嵌入式SQL的实现,有两种方法:的实现,有两种方法:n扩充宿主语言的编译程序,使之能处理扩充宿主语言的编译程序,使之能处理SQL语句;语句;n预处理方式(常用)预处理方式(常用)预处理方式:预处理方式:n将具有前缀的语句,转换成宿主语言的函数调用语句将具有前缀的语句,转换成宿主语言的函数调用语句n由宿主语言的编译器生成目标程序由宿主语言的编译器生成目标程序11嵌入式嵌入式SQL

6、执行过程执行过程宿主语言宿主语言 + + 嵌入嵌入SQLSQL 预处理程序预处理程序 宿主语言宿主语言 + + 函数调用函数调用 宿主语言编译器宿主语言编译器 宿主语言执行程序宿主语言执行程序 12嵌入式嵌入式SQL语句与主语句之间的通信语句与主语句之间的通信数据库与源程序工作单元之间通信主要包括:数据库与源程序工作单元之间通信主要包括:1.向主语言传递向主语言传递SQL语句的执行状态信息,使主语言能够据语句的执行状态信息,使主语言能够据此控制程序流程,主要用此控制程序流程,主要用SQL通信区通信区实现;(实现;(SQL Communication Area,简称,简称SQLCA)2. 主语言

7、向主语言向SQL语句提供参数,主要语句提供参数,主要用主变量用主变量(host variable)实现;)实现;3. 将将SQL语句查询数据库的结果交主语言进一步处理,主要语句查询数据库的结果交主语言进一步处理,主要用主变量和游标用主变量和游标(cursor)实现)实现SQL通信区通信区,主变量主变量,游标游标的概念的概念13 存储设备上的数据库是用存储设备上的数据库是用SQLSQL语句存取的,数语句存取的,数据库和宿主语言程序间信息的传递是通过据库和宿主语言程序间信息的传递是通过共享共享变量变量实现的。实现的。共享变量先由宿主语言程序定义,再用共享变量先由宿主语言程序定义,再用SQL的的DE

8、CLARE语句声明,随后语句声明,随后SQL语句就可引用这些语句就可引用这些变量。变量。共享变量共享变量是是SQL和宿主语言的接口。和宿主语言的接口。14nSQLSQL规定,规定,SQLSTATESQLSTATE是一个特殊的共享变量,是一个特殊的共享变量,起着解释起着解释SQLSQL语句执行状况的作用,由语句执行状况的作用,由5 5个字符个字符组成的字符数组的标准(组成的字符数组的标准(ISOISO)返回信息码。)返回信息码。nSQLSTATE:SQLSTATE:n00000:00000:成功成功n非非0 :0 :出错出错n02000:02000:未找到元组未找到元组n根据根据SQLSTATE

9、SQLSTATE的值可以控制程序的流向。的值可以控制程序的流向。1510.2 嵌入式嵌入式SQL的使用规定的使用规定1、在程序中要区分、在程序中要区分SQL语句与宿主语言语句语句与宿主语言语句嵌入的嵌入的SQL语句以语句以EXEC SQL开始,以分号开始,以分号(;) 或或END_EXEC结束(根据具体语言而定)结束(根据具体语言而定) EXEC SQL END_EXEC举例: EXEC SQL delete from swhere sno= s10;162、允许嵌入的、允许嵌入的SQL语句引用宿主语言的程序变量(共享变语句引用宿主语言的程序变量(共享变量),但有以下规定:量),但有以下规定:

10、(1)、宿主变量出现于、宿主变量出现于SQL语句中时,语句中时,前面加(前面加(:)以区别数)以区别数据库变量(列名)。据库变量(列名)。 宿主变量可出现在宿主变量可出现在SQL的数据操纵语句中可出现的数据操纵语句中可出现常数常数的任的任何地方,何地方,select等语句的等语句的into字句中。字句中。例:例:EXEC SQL select SNAME ,AGE into :stu_name , :age from s where SNO = :input_no ; 17(2).(2).共享变量的用法:先由宿主语言的程序定义,共享变量的用法:先由宿主语言的程序定义,并用并用SQLSQL的的D

11、ECLAREDECLARE语句说明。语句说明。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 ; 18(3) SQL(3) SQL的集合处理方式与宿主语言单记录处理方式之的集合处理方式与宿主语言单记录处理方式之间的协调间的协调SQL:一次一集合。:一次一集合。C语言:一次一记录。

12、语言:一次一记录。n游标:在查询结果的记录集合中移动的指针。游标:在查询结果的记录集合中移动的指针。若一个若一个SQL语句返回语句返回单个元组,则不用游标。单个元组,则不用游标。若一个若一个SQL语句返回语句返回多个元组,则使用游标多个元组,则使用游标。19需要游标的数据操作需要游标的数据操作当当selectselect语句的结果中包含多个元组时,使用游标语句的结果中包含多个元组时,使用游标可以逐个存取这些元组。可以逐个存取这些元组。活动集:活动集:selectselect语句返回的元组的集合。语句返回的元组的集合。当前行:当前行:活动集中当前处理的那一行。游标即是指向当前行活动集中当前处理的

13、那一行。游标即是指向当前行的指针。的指针。游标分类:游标分类:n滚动游标滚动游标:游标的位置可以来回移动,可在活动集中取任:游标的位置可以来回移动,可在活动集中取任意元组。意元组。n非滚动游标非滚动游标:只能在活动集中顺序地取下一个元组。:只能在活动集中顺序地取下一个元组。n更新游标更新游标:数据库对游标指向的当前行加锁,当程序读下:数据库对游标指向的当前行加锁,当程序读下一行数据时,本行数据解锁,下一行数据加锁。一行数据时,本行数据解锁,下一行数据加锁。20需要游标的数据操作需要游标的数据操作n游标的使用方法:游标的使用方法: 1 1、定义游标、定义游标:定义一个游标,使之对应一个定义一个游

14、标,使之对应一个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 /定位于第一行的前一行定位于第一行的前一行21需要游标的数据操作需要游标的数据操作3 3、游标推进语句:在活动集中将游标移到特定

15、的、游标推进语句:在活动集中将游标移到特定的行,并取出该行数据放到相应的宿主变量中行,并取出该行数据放到相应的宿主变量中 EXEC SQL FETCH FROM EXEC SQL FETCH FROM INTO INTO END_EXEC END_EXEC4 4、游标关闭语句、游标关闭语句 :关闭游标,释放活动集及其所:关闭游标,释放活动集及其所占资源,使它不再和查询结果相联系。需要再使占资源,使它不再和查询结果相联系。需要再使用该游标时,执行用该游标时,执行openopen语句。语句。 EXEC SQL CLOSE EXEC SQL CLOSE END_EXEC END_EXEC2210.3

16、 嵌入式嵌入式SQL的使用技术的使用技术1 1、不需要游标的、不需要游标的SQLSQL操作操作如果是如果是insertinsert、deletedelete和和updateupdate,加上前缀,加上前缀EXEC SQL EXEC SQL 和和END_EXEC END_EXEC 就可以嵌入在宿主语言中使用,对于就可以嵌入在宿主语言中使用,对于selectselect语句,如果已知结果为单元组,可以直接嵌入在主程序语句,如果已知结果为单元组,可以直接嵌入在主程序中使用。中使用。1 1)结果是一个元组的)结果是一个元组的selectselect语句语句EXEC SQL select SNAME ,

17、AGEEXEC SQL select SNAME ,AGE into :stu_name,:age into :stu_name,:age from s from s where sno = s10; where sno = s10;23不需要游标的数据操作不需要游标的数据操作ninsert语句 EXEC SQL insert into s values (:stu_no, :stu_name , :stu_age , :stu_sex) ;ndelete语句 EXEC SQL delete from s values age :stu_age ;nupdate语句EXEC SQL updat

18、e sc set grade=grade+:raisewhere c# in(select c# from c where cname=MATHS) ;24(2)涉及游标的涉及游标的SQL DML语句语句(Data Manipulation Language)数据操纵语言)数据操纵语言 1 1)selectselect语句的使用方式语句的使用方式当当selectselect语句查询结果是语句查询结果是多个元组多个元组时,要用游标把多个元时,要用游标把多个元组一次一次的传递给宿主语言程序处理;具体过程:组一次一次的传递给宿主语言程序处理;具体过程:1 1、先定义一个游标与某个、先定义一个游标与某

19、个selectselect语句对应。语句对应。2 2、打开游标、打开游标( (活动状态活动状态) ),此时游标指向第一个元组之前。,此时游标指向第一个元组之前。3 3、每执行一次、每执行一次fetchfetch语句,游标指向下一个元组,并把其语句,游标指向下一个元组,并把其值送到共享变量,供程序处理,如此重复,直到所有查询值送到共享变量,供程序处理,如此重复,直到所有查询结果处理完毕。结果处理完毕。4 4、最后用、最后用closeclose语句关闭游标。语句关闭游标。 关闭的游标可以被重新打开,与新的查询结果相关闭的游标可以被重新打开,与新的查询结果相联系,没有打开前,不能使用。联系,没有打开

20、前,不能使用。252)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 scx; g=70; pri

21、ntf(“sno:%s,cno:%s:%d”,sno,cno,g); 26(3)(3)卷游标的定义和使用卷游标的定义和使用n上面的游标,在推进时只能沿查询结果中元组顺序从头到尾上面的游标,在推进时只能沿查询结果中元组顺序从头到尾一行行推进,并且不能返回,不便。一行行推进,并且不能返回,不便。nSQLSQL提供了卷游标,在推进卷游标时可以进退自如。提供了卷游标,在推进卷游标时可以进退自如。n1 1)卷游标的定义)卷游标的定义:EXEC SQL DECLARE SCROLL CURSOR FOR END_EXEC27n卷游标卷游标的打开和关闭与以前一样。的打开和关闭与以前一样。n2 2)卷游标的推进语句:)卷游标的推进语句:EXEC SQL FETCH NEXT | PRIOR | FIRST | LAST | CURRENT | RELATIVE N | ABSOLUTE M INTO END_EXEC28nRelative 3:表示把游标从当前位置推进3行;nRelative 5:表示把游标从当前位置返回5行;nAbsolute 4:表示把游标移向查询结果的第4行;nAbsolute 6:表示把游标移向查询结果的倒数第6行;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!