- 1、本文档共73页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库系统概念----数据分析与挖掘 4.4 嵌入式SQL 为什么使用嵌入式SQL? 嵌入式SQL执行过程 需要解决的几个问题 为什么使用嵌入式SQL? 有些操作对于交互式SQL是不可能的任务 SQL的表达能力相比高级语言有一定的限制,有些数据访问要求单纯使用SQL无法完成。一方面,SQL在逐渐增强自己的表达能力(参见习题4.10),另一方面,太多的扩展会导致优化能力及执行效率的降低 非声明性动作 实际的应用系统是非常复杂的,数据库访问只是其中一个部件。有些动作如与用户交互、图形化显示数据等只能用高级语言实现 嵌入式SQL执行过程 需要解决的几个问题 区分SQL语句与C语言语句 嵌入的SQL语句以EXEC SQL开始,以分号(;) 或END_EXEC结束 EXEC SQL delete from PROF where DNO = 10; 需要解决的几个问题 嵌入SQL语句与C语言之间的数据传递 宿主变量 C变量,既可以用在C语句中,也可用在SQL语句中,用来在两者之间传递数据 宿主变量的声明 声明为通常的C变量,并将其放在下列标识语句之间 EXEC SQL BEGIN DECLARE SECTION EXEC SQL END DECLARE SECTION 需要解决的几个问题 EXEC SQL BEGIN DECLARE SECTION int prof_no; char prof_name[30]; int salary; EXEC SQL END DECLARE SECTION 需要解决的几个问题 注:宿主变量出现于SQL语句中时,前面加(:)以区别列名 宿主变量可出现的地方:SQL的数据操纵语句中可出现常数的任何地方,select,fetch等语句的into子句中 示例: EXEC SQL select PNAME , SAL into :prof_name , :salary from PROF where PNO = :prof_no ; 需要解决的几个问题 SQL与主语言之间操作方式的协调 执行方式的差别 SQL:一次一集合 C语言:一次一记录 游标 在查询结果的记录集合中移动的指针 若一个SQL语句返回单个元组,则不用游标 若一个SQL语句返回多个元组,则使用游标 需要解决的几个问题 不需要游标的数据操作 结果是一个元组的select语句 EXEC SQL select PNAME , SAL into :prof_name, :salary from PROF where PNO = :prof_no ; 需要解决的几个问题 insert语句 EXEC SQL insert into PROF values (:prof_no, :prof_name , :salary , :dept_no , : salary) ; delete语句 EXEC SQL delete from PROF where PNO :prof_no ; update语句 EXEC SQL update PROF set SAL = :salary where PNO = : prof_no ; 需要解决的几个问题 需要游标的数据操作 当select语句的结果中包含多个元组时,使用游标可以逐个存取这些元组 活动集:select语句返回的元组的集合 当前行:活动集中当前处理的那一行。游标即是指向当前行的指针 需要解决的几个问题 定义与使用游标的语句 declare 定义一个游标,使之对应一个select语句 declare 游标名 cursor for select语句[for update [of列表名]] for update:该游标可用于对当前行的修改删除 open 打开游标,执行对应的查询,结果集为该游标的活动集 open 游标名 需要解决的几个问题 fetch 在活动集中将游标移到特定的行,并取出该行数据放到相应的宿主变量中 fetch 游标名 into [宿主变量表] close 关闭游标,释放活动集及其所占资源。需要再使用该游标时,执行open语句 close 游标名 需要解决的几个问题 推进游标指针 EXEC SQL FETCH 游标名 INTO 主变量[指示变量][,主变量[指示变量]]... FETCH语句通常用在一个
文档评论(0)