第七章数据库设计与编程内容摘要:

WHERE Sdept=39。 CS39。 六、非 CURRENT形式的 DELETE语句  非 CURRENT形式的 DELETE语句  使用主变量  WHERE子句  非 CURRENT形式的 DELETE语句可以操作多条元组 非 CURRENT形式的 DELETE语句(续) 例 8 某个学生退学了,现要将有关他的所有选课记录删除掉。 假设该学生的姓名已赋给主变量 stdname EXEC SQL DELETE FROM SC WHERE Sno= (SELECT Sno FROM Student WHERE Sname=:stdname)。 七、 INSERT语句  非 CURRENT形式的 INSERT语句  使用主变量  VALUES子句  使用指示变量  VALUES子句  非 CURRENT形式的 INSERT语句一次只能输入一条元组 INSERT语句(续) 例 9 某个学生新选修了某门课程,将有关记录插入 SC表 假设学生的学号已赋给主变量 stdno,课程号已赋给主变量 couno。 gradeid=1。 EXEC SQL INSERT INTO SC(Sno, Cno, Grade) VALUES(:stdno, :couno, :gr:gradeid)。  由于该学生刚选修课程,尚未考试,因此成绩列为空。 所以本例中用指示变量指示相应的主变量为空值。 使用游标的 SQL语句  必须使用游标的 SQL语句  查询结果为多条记录的 SELECT语句  CURRENT形式的 UPDATE语句  CURRENT形式的 DELETE语句 一、 查询结果为多条记录的 SELECT语句  使用游标的步骤  1. 说明游标  2. 打开游标  3. 移动游标指针,然后取当前记录  4. 关闭游标 1. 说明游标  使用 DECLARE语句  语句格式 EXEC SQL DECLARE 游标名 CURSOR FOR SELECT语句。  功能  是一条说明性语句,这时 DBMS并不执行SELECT指定的查询操作。 2. 打开游标  使用 OPEN语句  语句格式 EXEC SQL OPEN 游标名。  功能  打开游标实际上是执行相应的 SELECT语句,把所有满足查询条件的记录从指定表取到缓冲区中  这时游标处于活动状态,指针指向查询结果集中第一条记录之前 3. 移动游标指针,然后取当前记录  使用 FETCH语句  语句格式 EXEC SQL FETCH [[NEXT|PRIOR| FIRST|LAST] FROM] 游标名 INTO 主变量 [指示变量 ] [,主变量 [指示变量 ]]...。 移动游标指针,然后取当前记录(续)  功能  指定方向推动游标指针,然后将缓冲区中的当前记录取出来送至主变量供主语言进一步处理。  NEXT|PRIOR|FIRST|LAST:指定推动游标指针的方式。  NEXT:向前推进一条记录  PRIOR:向回退一条记录  FIRST:推向第一条记录  LAST:推向最后一条记录  缺省值为 NEXT 移动游标指针,然后取当前记录(续)  说明  (1) 主变量必须与 SELECT语句中的目标列表达式具有一一对应关系  (2) FETCH语句通常用在一个循环结构中,通过循环执行 FETCH语句逐条取出结果集中的行进行处理  (3) 为进一步方便用户处理数据,现在一些关系数据库管理系统对 FETCH语句做了扩充,允许用户向任意方向以任意步长移动游标指针 4. 关闭游标  使用 CLOSE语句  语句格式 EXEC SQL CLOSE 游标名。  功能  关闭游标,释放结果集占用的缓冲区及其他资源  说明  游标被关闭后,就不再和原来的查询结果集相联系  被关闭的游标可以再次被打开,与新的查询结果相联系 例题 例 1 查询某个系全体学生的信息(学号、姓名、性别和年龄)。 要查询的系名由用户在程序运行过程中指定,放在主变量 deptname中 ...... ...... EXEC SQL INCLUDE SQLCA。 EXEC SQL BEGIN DECLARE SECTION。 例题(续) ...... /* 说明主变量 deptname,HSno,HSname,HSsex,HSage等 */ ...... ...... EXEC SQL END DECLARE SECTION。 ...... ...... gets(deptname)。 /* 为主变量 deptname赋值 */ ...... 例题(续) EXEC SQL DECLARE SX CURSOR FOR SELECT Sno, Sname, Ssex, Sage FROM Student WHERE SDept=:deptname。 /* 说明游标 */ EXEC SQL OPEN SX /* 打开游标 */ 例题(续) WHILE(1) /* 用循环结构逐条处理结果集中的记录 */ { EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex, :HSage。 /* 将游标指针向前推进一行,然后从结 果集中取当前行,送相应主变量 */ 例题(续) if ( SUCCESS) break。 /* 若所有查询结果均已处理完或出现 SQL语句错误,则退出循环 */ /* 由主语言语句进行进一步处理 */ ...... ...... }。 例题(续) EXEC SQL CLOSE SX。 /* 关闭游标 */ ...... ...... 例题(续) 例 2 查询某些系全体学生的信息。 ...... ...... EXEC SQL INCLUDE SQLCA。 EXEC SQL BEGIN DECLARE SECTION。 ...... /* 说明主变量 deptname,HSno,HSname,HSsex,HSage等 */ ...... ...... 例题(续) EXEC SQL END DECLARE SECTION。 ...... ...... ...... EXEC SQL DECLARE SX CURSOR FOR SELECT Sno, Sname, Ssex, Sage FROM Student WHERE SDept=:deptname。 /* 说明游标 */ 例题(续) WHILE (gets(deptname)!=NULL) /* 接收主变量deptname的值 */ { /* 下面开始处理 deptname指定系的学生信息 , 每次循环中 deptname可具有不同的值 */ EXEC SQL OPEN SX /* 打开游标 */ 例题(续) WHILE (1) { /* 用循环结构逐条处理结果集中的记录 */ EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex, :HSage。 /* 将游标指针向前推进一行,然后从结果集中取当前行,送相应主变量 */ 例题(续)。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。