欢迎来到天天文库
浏览记录
ID:52243162
大小:64.50 KB
页数:12页
时间:2020-04-03
《数据库应用技术 嵌入式SQL简介.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、嵌入式SQL简介SQL的两种使用方式:自含式嵌入式将SQL嵌入到宿主语言中使用必须解决的问题:如何区分宿主语言的语句和SQL的语句,并能将嵌入有SQL的宿主语言源程序编译成为可执行代码。宿主语言与数据库管理系统之间如何进行通信,使得SQL语句中能够使用宿主语言的变量。如何协调宿主语言的单记录处理方式和SQL集合处理方式之间的差异。如何进行宿主语言与SQL之间数据类型的转换。1第3章结构化查询语言SQL嵌入式SQL的说明语句为了能够区分C语言的语句和SQL的语句,规定SQL的语句前面加上标识“EX
2、ECSQL”,语句的结尾加上分号“;”作为语句的结束标识。C语言和SQL之间的数据通信通过宿主变量来实现。宿主变量是SQL中能够引用的C语言变量。宿主变量需要使用带有标识“EXECSQL”的说明语句说明。在SQL中引用宿主变量时,在宿主变量前面需加上一个冒号“:”作为标识,以区别于数据库中的变量(如属性名)。在C语言的语句中,宿主变量与其他变量同样使用。宿主变量的类型按照C语言的数据类型定义,如果与数据库中的数据类型不一致,则由数据库管理系统进行转换。对C语言而言,通常不允许把宿主变量定义为数组
3、或结构类型。2第3章结构化查询语言SQL嵌入式SQL的说明语句举例〖例3-33〗在C语言中对SQL用到的宿主变量说明语句的例子:EXECSQLBEGINDECLARESECTION;charSNO[9];charNAME[9];charCNO[6];floatGRADE;EXECSQLENDDECLARESECTION;3第3章结构化查询语言SQL嵌入式SQL的可执行语句游标:在嵌入式SQL中,把存放查询结果的区域及其相应的数据结构或者指示已取元组位置的指示器称为游标。游标操作语句:定义游标语句
4、:EXECSQLDECLARE<游标名>CURSORFOR;打开游标语句:EXECSQLOPEN<游标名>推进游标语句:EXECSQLFETCH<游标名>INTO<宿主变量1>,<宿主变量2>,...;关闭游标语句:EXECSQLCLOSE<游标名>;4第3章结构化查询语言SQL不用游标的DML语句查询结果为单个元组的SELECT语句:EXECSQLSELECT<目标列>INTO<宿主变量1>,<宿主变量2>,...FROM<基本表名或视图名>[WHERE<条件表达式>];功
5、能:从指定的基本表或视图中找到符合条件的元组,并把查询结果存放到指定的宿主变量中。注意:宿主变量前面要加上前缀标识冒号“:”,以区别于属性名等数据库中的变量;宿主变量要在主程序中定义并用SQL的DECLARE语句加以说明。其他不需要使用游标的UPDATE语句、DELETE语句和INSERT语句。只要按照规定加上前缀标识“EXECSQL”和结束标识“;”或“END_EXEC”,并且在引用宿主变量时加上前缀标识“:”,就能够嵌入C语言或其他宿主语言中使用。5第3章结构化查询语言SQL不用游标的DML
6、语句举例〖例3-34〗根据宿主变量givensno的值在基本表S中查询该学生的姓名、性别、年龄和系别。EXECSQLSELECT姓名,年龄,性别,系别INTO:sname,:sage,::ssex,departmentFROMSWHERES.学号=:givensno;6第3章结构化查询语言SQL不用游标的DML语句举例〖例3-35〗把基本表S中计算机科学与工程系学生的年龄加上宿主变量raise的值。EXECSQLUPDATESSET年龄=年龄+:raiseFROMSWHERES.系别=‘计算机科
7、学与工程系’;7第3章结构化查询语言SQL不用游标的DML语句举例〖例3-36〗根据宿主变量dept中所给出的系名,删除该系所有学生在基本表SC中的选课记录。EXECSQLDELETEFROMSCWHERE:dept=(SELECT系别FROMSWHERES.学号=SC.学号);8第3章结构化查询语言SQL不用游标的DML语句举例〖例3-37〗把一名新生的记录插入基本表S中,该生的简况由一组宿主变量givensnosname、sage、ssex、department给出。EXECSQLINSER
8、TINTOS(学号,姓名,年龄,性别,系别)VALUES(:givensno,:sname,:sage,:ssex,:department)9第3章结构化查询语言SQL使用游标的DML语句举例〖例3-38〗根据宿主变量dept中所给出的系名,查询该系所有学生在基本表S中的全部信息。EXECSQLDECLAREstudentCURSORFORSELECT学号,姓名,年龄,性别,系别FROMSWHERE系别=:dept;EXECSQLOPENstudent;while<条件表达式>{EXECSQLF
此文档下载收益归作者所有