如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
数据库系统概论AnIntroductiontoDatabaseSystem第八章数据库编程(1)第八章数据库编程学习目标8.1嵌入式SQL8.1嵌入式SQL8.1.1嵌入式SQL的处理过程8.1.1嵌入式SQL的处理过程8.1.1嵌入式SQL的处理过程8.1.1嵌入式SQL的处理过程8.1嵌入式SQL8.1.2嵌入式SQL语句与主语言之间的通信8.1.2嵌入式SQL语句与主语言之间的通信1.SQL通信区1.SQL通信区1.SQL通信区2.主变量2.主变量2.主变量2.主变量(4)指示变量一个主变量可以附带一个指示变量(IndicatorVariable)什么是指示变量整型变量用来“指示”所指主变量的值或条件(4)指示变量指示变量的用途输入主变量可以利用它赋空值输出主变量可以利用它检测出是否空值,值是否被截断2.主变量2.主变量2.主变量2.主变量3.游标(cursor)(2)什么是游标游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果;每个游标区都有一个名字;用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。(3)嵌入式SQL的工作原理SQL语句与主语言语句分工明确SQL语句:直接与数据库打交道主语言语句:①控制程序流程②对SQL语句结果做进一步处理SQL语句用主变量从主语言中接收执行参数,操纵数据库SQL语句的执行状态由DBMS送至SQLCA中(3)嵌入式SQL的工作原理(续)主语言程序从SQLCA中取出状态信息,据此决定下一步操作如果SQL语句成功地检索出数据,则通过主变量传给主语言做进一步处理SQL语言和主语言的不同数据处理方式通过游标来协调8.1.2嵌入式SQL语句与主语言之间的通信例:带有嵌入式SQL的一小段C程序例:带有嵌入式SQL的一小段C程序例:带有嵌入式SQL的一小段C程序8.1嵌入式SQL8.1.3不用游标的SQL语句1.说明性语句1.说明性语句[例1]建立一个学生表Student。EXECSQLCREATETABLEStudent(SnoCHAR(5)NOTNULLUNIQUE,SnameCHAR(8),SsexCHAR(1),SageINT,SdeptCHAR(15));3.数据控制语句4.查询结果为单记录的SELECT语句4.查询结果为单记录的SELECT语句4.查询结果为单记录的SELECT语句4.查询结果为单记录的SELECT语句[例2]根据学生学号查询学生信息.设已将要查询的学生学号赋给了主变量givensno。EXECSQLSELECTSno,Sname,Ssex,Sage,SdeptINTO:Hsno,:Hname,:Hsex,:Hage,:HdeptFROMStudentWHERESno=:givensno;[例3]查询某个学生选修某门课程的成绩。设:已将要查询的学生学号赋给了主变量givensno,将课程号赋给了主变量givencnoEXECSQLSELECTSno,Cno,GradeINTO:Hsno,:Hcno,:Hgrade:GradeidFROMSCWHERESno=:givensnoANDCno=:givencno;5.非CURRENT形式的UPDATE语句[例4]将全体学生1号课程的考试成绩增加若干分。设:增加分数已赋给主变量Raise。EXECSQLUPDATESCSETGrade=Grade+:RaiseWHERECno='1';[例5]修改某个学生1号课程的成绩。设:该学生学号已赋给主变量givensno;修改后的成绩已赋给主变量newgradeEXECSQLUPDATESCSETGrade=:newgradeWHEREno=:givensnoANDCno=‘1’;[例6]将计算机系全体学生年龄置NULL值。Sageid=-1;EXECSQLUPDATEStudentSETSage=:Hage:SageidWHERESdept='CS';[例6]将计算机系全体学生年龄置NULL值。Sageid=-1;EXECSQLUPDATEStudentSETSage=:Hage:SageidWHERESdept='CS';[例7]某个学生退学,现将他的所有选课记录删除掉。假设:该学生的姓名已赋给主变量stdname。EXECSQLDELETEFROMSCWHERESno=(SELECTSnoFROMStudentWHERESname=:stdname);7.非CURRENT形式的INSERT语句8.1.4使用游标的SQL语句1.查询结果为多条记录的SELECT语句游标的典型使用过程1.查询结果为多条记录的SEL