《嵌入式SQL补充》PPT课件.ppt_第1页
《嵌入式SQL补充》PPT课件.ppt_第2页
《嵌入式SQL补充》PPT课件.ppt_第3页
《嵌入式SQL补充》PPT课件.ppt_第4页
《嵌入式SQL补充》PPT课件.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章数据库编程 嵌入式SQL 练习 显示 王平 同学的学号和电话查询 数据库设计 课程的任课教师工号查询马建平授课的数据库设计班中 王一 的成绩 usema regi1Selectid name phonefromm studentwherename 王一 usema regi2Selectinstructor idfromsectionwheresecton code selectcodefromcoursewheretitle 数据库设计 Selectstudent id section call no gradefromm enrollWherem enroll section call no Selectcall nofromm sectionwhereinstructor id selectidfromm instructorwherename 马建平 andcourse code selectcodefromm coursewheretitle 数据库设计 Selectstudent id section call no gradefromm enrollwherem enroll student id selectidfromm studentwherename 王一 andm enroll section call no Selectcall nofromm sectionwhereinstructor id selectidfromm instructorwherename 马建平 andcourse code selectcodefromm coursewheretitle 数据库设计 10 1SQL语言的运行环境 SQL有两种使用方式 终端交互方式下使用 交互式SQL嵌入在高级语言中使用 嵌入式SQL 高级语言可以是C PASCAL COBOL等 称为宿主语言 有些操作对于交互式SQL是不可能的任务 SQL的表达能力相比高级语言有一定的限制 有些数据访问要求单纯使用SQL无法完成 1 SQL在逐渐增强自己的表达能力 2 太多的扩展会导致优化能力及执行效率的降低 非声明性动作实际的应用系统是非常复杂的 数据库访问只是其中一个部件 有些动作如与用户交互 图形化显示数据等只能用高级语言实现 为什么使用嵌入式SQL 将SQL访问数据库的能力 与宿主语言的过程化处理的能力进行综合将SQL语句嵌入宿主语言中引入变量的使用 嵌入式SQL的实现 有两种方法 扩充宿主语言的编译程序 使之能处理SQL语句 预处理方式 常用 预处理方式 将具有前缀的语句 转换成宿主语言的函数调用语句由宿主语言的编译器生成目标程序 嵌入式SQL执行过程 嵌入式SQL语句与主语句之间的通信 数据库与源程序工作单元之间通信主要包括 1 向主语言传递SQL语句的执行状态信息 使主语言能够据此控制程序流程 主要用SQL通信区实现 SQLCommunicationArea 简称SQLCA 2 主语言向SQL语句提供参数 主要用主变量 hostvariable 实现 3 将SQL语句查询数据库的结果交主语言进一步处理 主要用主变量和游标 cursor 实现SQL通信区 主变量 游标的概念 存储设备上的数据库是用SQL语句存取的 数据库和宿主语言程序间信息的传递是通过共享变量实现的 共享变量先由宿主语言程序定义 再用SQL的DECLARE语句声明 随后SQL语句就可引用这些变量 共享变量是SQL和宿主语言的接口 SQL规定 SQLSTATE是一个特殊的共享变量 起着解释SQL语句执行状况的作用 由5个字符组成的字符数组的标准 ISO 返回信息码 SQLSTATE 00000 成功非0 出错02000 未找到元组根据SQLSTATE的值可以控制程序的流向 10 2嵌入式SQL的使用规定 1 在程序中要区分SQL语句与宿主语言语句嵌入的SQL语句以EXECSQL开始 以分号 或END EXEC结束 根据具体语言而定 EXECSQLEND EXEC举例 EXECSQLdeletefromswheresno s10 2 允许嵌入的SQL语句引用宿主语言的程序变量 共享变量 但有以下规定 1 宿主变量出现于SQL语句中时 前面加 以区别数据库变量 列名 宿主变量可出现在SQL的数据操纵语句中可出现常数的任何地方 select等语句的into字句中 例 EXECSQLselectSNAME AGEinto stu name agefromswhereSNO input no 2 共享变量的用法 先由宿主语言的程序定义 并用SQL的DECLARE语句说明 EXECSQLBEGINDECLARESECTIONintstu no charstu name 30 intage charSQLSTATE 6 EXECSQLENDDECLARESECTIONEXECSQLselectsname ageinto stu name agefromswheresno stu no 3 SQL的集合处理方式与宿主语言单记录处理方式之间的协调SQL 一次一集合 C语言 一次一记录 游标 在查询结果的记录集合中移动的指针 若一个SQL语句返回单个元组 则不用游标 若一个SQL语句返回多个元组 则使用游标 需要游标的数据操作 当select语句的结果中包含多个元组时 使用游标可以逐个存取这些元组 活动集 select语句返回的元组的集合 当前行 活动集中当前处理的那一行 游标即是指向当前行的指针 游标分类 滚动游标 游标的位置可以来回移动 可在活动集中取任意元组 非滚动游标 只能在活动集中顺序地取下一个元组 更新游标 数据库对游标指向的当前行加锁 当程序读下一行数据时 本行数据解锁 下一行数据加锁 需要游标的数据操作 游标的使用方法 1 定义游标 定义一个游标 使之对应一个select语句 EXEC SQLDECLARECURSORFOREND EXEC2 打开游标 打开一个游标 执行游标对应的查询 结果集合为该游标的活动集 EXECSQLOPEN 执行查询END EXEC 定位于第一行的前一行 需要游标的数据操作 3 游标推进语句 在活动集中将游标移到特定的行 并取出该行数据放到相应的宿主变量中EXECSQLFETCHFROMINTOEND EXEC4 游标关闭语句 关闭游标 释放活动集及其所占资源 使它不再和查询结果相联系 需要再使用该游标时 执行open语句 EXECSQLCLOSEEND EXEC 10 3嵌入式SQL的使用技术 1 不需要游标的SQL操作如果是insert delete和update 加上前缀EXECSQL和END EXEC就可以嵌入在宿主语言中使用 对于select语句 如果已知结果为单元组 可以直接嵌入在主程序中使用 1 结果是一个元组的select语句EXECSQLselectSNAME AGEinto stu name agefromswheresno s10 不需要游标的数据操作 insert语句EXECSQLinsertintosvalues stu no stu name stu age stu sex delete语句EXECSQLdeletefromsvaluesage stu age update语句EXECSQLupdatescsetgrade grade raisewherec in selectc fromcwherecname MATHS 2 涉及游标的SQLDML语句 DataManipulationLanguage 数据操纵语言 1 select语句的使用方式 当select语句查询结果是多个元组时 要用游标把多个元组一次一次的传递给宿主语言程序处理 具体过程 1 先定义一个游标与某个select语句对应 2 打开游标 活动状态 此时游标指向第一个元组之前 3 每执行一次fetch语句 游标指向下一个元组 并把其值送到共享变量 供程序处理 如此重复 直到所有查询结果处理完毕 4 最后用close语句关闭游标 关闭的游标可以被重新打开 与新的查询结果相联系 没有打开前 不能使用 2 对游标指向元组的修改或删除操作 在游标处于活动状态时 可以修改或删除游标指向的元组 While 1 ExecsqlFetchFROMscxinto sno cno gif NO MORE TUPLES break if g 60 ExecsqlDELETEFROMscWHERECURRENTOFscx else if g 70 EXECSQLUPDATEscSETgrade 70WHERECURRENTOFscx g 70 printf sno s cno s d sno cno g 3 卷游标的定义和使用 上面的游标 在推进时只能沿查询结果中元组顺序从头到尾一行行推进 并且不能返回 不便 SQL提供了卷游标 在推进卷游标时可以进退自如 1 卷游标的定义 EXECSQLDECLARESCROLLCURSORFOREND EXEC 卷游标的打开和关闭

温馨提示

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

评论

0/150

提交评论