void ChangeDNO()
{ …
EXEC SQL BEGINDECLARESECTION;
int maxage;
char xh[7], xm[9], sex[3], yxh[4], newdno[4];
EXEC SQL ENDDECLARESECTION;
//以上代码用于说明共享变量
scanf(“%d”,&maxage); //输入要求的共享变量用于筛选年龄
EXEC SQL DECLARE ex CURSOR FOR //声明ex为游标,用于存放单条的记录
Select xh,xm,sex,yxh from S //select语句,决定ex中放入的记录,但现在并不执行
Where csrq> :maxage;//筛选年龄
…
EXEC SQL OPEN ex //打开游标语句,与游标相应的语句被执行
EXEC SQL
Fetch from ex into :xh,:xm,:sex,:yxh;
//游标推进一个记录,并把游标指向的记录(当前行的记录)中的值提取出,然后送到into子句后相应的共享变量中(用前缀:修饰的变量)
while (1)
{
if (SQLCA.SQLSTATE ! =‘00000’)
break;
printf(“%s,%s, %s,%s”, eno, ename, sex, yxh);
printf(“UPDATE DNO? ”);
scanf(“%c”, &yn);
if (yn==‘y’ or yn=‘Y’)
{ printf(“INPUT NEW DNO: ”);
scanf(“%s”, newdno);
EXEC SQL UPDATE S set yxh=:newdno wherecurrentof ex;
//如果需要修改学院号就执行update语句,将newdno中的数据放入当前游标指向的记录中(即学院号这一字段)
}
EXECSQLFetchfrom ex into :xh,:xm,:sex,:yxh;
//用于循环推进一个记录
}
EXEC SQL CLOSE ex; //关闭游标语句
2. 1)用多种方法表达查询:检索刘晓明不学的课程的课程号。
第一种方法:嵌套查询
select kh from O
where kh notin (
select E.kh from E,S