您当前的位置:《数据库原理及应用》听课笔记:32
《数据库原理及应用》听课笔记:32
四、查询类动态SQL
~~查询类动态SQL必须返回查询结果,结果为一个元组还是多元组不能在编程时确定。故动态SQL一律用游标取数。
~~下边例子,用户输入ORDER BY子句和课号。
~~ORDER BY子句在语句尾,注意其后必须加分号。
~~如需要,整个SQL语句也可动态构成,这给动态SQL增加了交互能力,有时是很有用处的。
EXEC SQL BEGIN DECLARE SECTION;
char sqlstring[200];
char SNO[7];
float GRADE;
short GRADEI;
char GIVENCNO[6];
EXEC SQL END DECLARE SECTION;
char orderby[150];
strcpy(sqlstring,"SELECT SNO,GRADE FROM SC WHERE CNO=:c");
/:c为占位器
/*提示用户输入ORDER BY子句*/
printf("Enter the ORDER BY clause:");
scanf("%s",orderby);
strcat(sqlstring,orderby);
/*提示用户输入要查询的课号*/
printf("%s",GIVENCNO);
EXEC SQL PREPARE query FROM :sqlstring;
/*声明游标*/
EXEC SQL DECLARE grade-cursor CURSOR FOR query;
/*打开游标,取代占位器,执行相应SQL语句*/
EXEC SQL OPEN grade-cursor USING :GIVENCNO;
/*取数*/
while(TRUE)
{
if(SQLCA.SQLCODE==100)
break;
if(SQLCA.SQLCODE<0)
break;
EXEC SQL FETCH grade-cursor INTO :SNO,:GRADE,:GRADEI;
.../*处理从游标取的数据*/
}
EXEC SQL CLOSE grade-cursor;

五 SQL的过程存储
~~过程存储:是将常用的访问数据库的程序,作为一个过程,经编译后,存储在数据库中,并在数据目录(字典)中登录供用户调用。--像编译好的宏
~~方便用户减少编译,减少通信量,可以扩充功能。

收藏状态
收藏本课程的同学
相关课程