EXEC SQL BEGIN DECLARE SECTION; //主變量說明開始
char deptname[20];
char hsno[9];
char hsname[20];
char hssex[2];
int HSage;
int NEWAGE;
EXEC SQL END DECLARE SECTION; //主變量說明結束
long SOLCODE;
EXEC SQL INCLUDE SQLCODEE; //定義SQL通信區
int main(void){
int count = 0;
char yn; //變量yn代表yes或no
printf("Please choose the department name(CS/MA/IS):");
scanf("%s", &deptname);
EXEC SQL CONNECT TO TEST@localhost:54321 USER "SYSTEM"/"MANAGER";//連接數據庫
EXEC SQL DECLARE SX CURSOR FOR //定義遊標SX
SELECT Sno,Sname,Ssex,Sage; //SX對應的語句
FORM Student
WHERE SDept=:deptname;
EXEC SQL OPEN SX; //打開遊標 SX,指向查詢結果的第一行
for(;;){ //用循環結構逐條處理結果集中的記錄
EXEC SQL FETCH SX INTO :HSno,:HSname,:HSsex,:HSage; //推進遊標,將當前數據放入主變量
if(SQLCA.SQLCODE != 0) //SQLCODE != 0,表示操作不成功
break //利用SQLCA中的狀態信息決定何時退出循環
if(count++ == 0){ //如果是第一行的話,先打出行頭
printf("\n%-10s%-20s%-10s%-10s%\n", "Sno", "Sname", "Ssex", "Sage");
}
printf("%-10s%-20s%-10s%-10s%\n", HSno, HSname, HSsex, HSage); //結果
printf("UPDATE AGE(y/n)?"); //詢問用戶是否要更新該學生的年齡
do{
scanf("%c", &yn);
} while(yn!='N' && yn != 'n' && yn != 'Y' && yn != 'y');
if(yn == 'y' || yn == 'Y'){ //更新操作
printf("INPUT NEW AGE:");
sncaf("%d", &NEWAGE); //用戶輸入新年齡到主變量中
EXEC SQL UPDATE Student //嵌入式SQL更新語句
SET Sage=:NEWAGE
WHERE CURRENT OF SX; //對當前遊標指向的學生年齡進行更新
}
EXEC SQL CLOSE SX; //關閉遊標SX, 不再和查詢結果對應
EXEC SQL COMMIT WORK; //提交更新
EXEC SQL DISCONNECT TEST; //斷開數據庫連接
}
}
數據庫應用編程(C語言嵌入式)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.