文档介绍:不用游标的SQL语句
不用游标的SQL语句的种类
说明性语句
数据定义语句
数据控制语句
查询结果为单记录的SELECT语句
非CURRENT形式的UPDATE语句
非CURRENT形式的DELETE语句
INS Database System
查询结果为单记录的SELECT语句(续)
例3 根据学生号码查询学生信息。
假设已将要查询的学生的学号赋给了主变量givensno
EXEC SQL SELECT Sno, Sname, Ssex, Sage, Sdept
INTO :Hsno, :Hname, :Hsex, :Hage, :Hdept
FROM Student
WHERE Sno=:givensno;
Hsno, Hname, Hsex, Hage, Hdept和givensno均是主变量,并均已在前面的程序中说明过了。
An Introduction to Database System
查询结果为单记录的SELECT语句(续)
例4 查询某个学生选修某门课程的成绩。
假设已将要查询的学生的学号赋给了主变量givensno,将课程号赋给了主变量givencno。
EXEC SQL SELECT Sno, Cno, Grade
INTO :Hsno, :Hcno, :Hgrade:Gradeid
FROM SC
WHERE Sno=:givensno AND Cno=:givencno;
An Introduction to Database System
查询结果为单记录的SELECT语句(续)
从提高应用程序的数据独立性角度考虑,SELECT语句在任何情况下都应该使用游标
对于仅返回一行结果数据的SELECT语句虽然可以不使用游标
但如果以后数据库改变了,该SELECT语句可能会返回多行数据,这时该语句就会出错
An Introduction to Database System
五、非CURRENT形式的UPDATE语句
非CURRENT形式的UPDATE语句
使用主变量
SET子句
WHERE子句
使用指示变量
SET子句
非CURRENT形式的UPDATE语句可以操作多条元组
An Introduction to Database System
非CURRENT形式的UPDATE语句(续)
例5 将全体学生1号课程的考试成绩增加若干分。
假设增加的分数已赋给主变量Raise
EXEC SQL UPDATE SC
SET Grade=Grade+:Raise
WHERE Cno='1';
An Introduction to Database System
非CURRENT形式的UPDATE语句(续)
例6 修改某个学生1号课程的成绩。
假设该学生的学号已赋给主变量givensno,
修改后的成绩已赋给主变量newgrade。
EXEC SQL UPDATE SC
SET Grade=:newgrade
WHERE Sno=:givensno;
An Introduction to Database System
非CURRENT形式的UPDATE语句(续)
例7 将计算机系全体学生年龄置NULL值
Sageid=-1;
EXEC SQL UPDATE Student
SET Sage=:Raise:Sageid
WHERE Sdept='CS';
An Introduction to Database System
非CURRENT形式的UPDATE语句(续)
将指示变量Sageid赋一个负值后,无论主变量Raise为何值,DBMS都会将CS系所有记录的年龄属性置空值。它等价于:
EXEC SQL UPDATE Student
SET Sage=NULL
WHERE Sdept='CS';
An Introduction to Database System
六