ESQL编程使用说明( 四 )


EXEC SQL BEGIN DECLARE SECTION ;
INT status;
CHAR sno[10],sname[10],city[10],isno[10];
EXEC SQL END DECLARE SECTION ;
EXEC SQL INCLUDE USERCA;main()
{
EXEC SQL CONNECT "cobase:cobase" ; /* log into COBASE */

printf("input the sno for update:");
scanf("%s",sno);
EXEC SQL SELECT sno,sname,status,city
INTO :sno , :sname ,:status,:city
from S_TEST WHERE sno=:sno;printf("sno: %s ;",sno);
printf("sname: %s ;",sname);
printf("status: %d ;",status);
printf("city: %s ;",city);
EXEC SQL COMMIT;
EXEC SQL DISCONNECT;
exit(0);

}
例题程序4 (返回多行的查询)
/*=============================================================================
This is a sample program which uses SELECT statement of Esql.
It is an example of how to do queries that return more than
one row.
==============================================================================*/
EXEC SQL BEGIN DECLARE SECTION ;
INT status[10];
CHAR sno[10][10],sname[10][15],city[10][20],isno[10];
EXEC SQL END DECLARE SECTION ;
EXEC SQL INCLUDE USERCA;main(){ int i;EXEC SQL CONNECT "cobase:cobase" ; /* log into COBASE */for(i=0;i<10;i)
{
strcpy(sno[i],"ttttt");
strcpy(sname[i],"ttttt");
strcpy(city[i],"ttttt");
status[i]=1000;
}EXEC SQL SELECT sno,sname,status,city
INTO :sno , :sname ,:status,:city
from S_TEST;printf("sno sname status city");
for(i=0;i<10;i)
{ printf("%8s %8s ?%8s ",sno[i],sname[i],status[i],city[i]);
getchar();
}
EXEC SQL COMMIT;
EXEC SQL DISCONNECT;
}
3.2 游标的使用我们知道SQL语言是一种面向集合的语言,而普通的高级语言则是面向记录的语言,要想使SQL语言能与宿主语言通讯,ESQL提供了游标操作,能把SQL的集合操作结果,按单个记录方式取出,赋于主变量进行进一步的处理.
如果查询结果返回多行或不知返回多少行,就可使用带游标的SELECT语句.一个游标(CURSOR)是一个COBASE和ESQL使用的工作区域,COBASE使用这个工作区存放着一个查询结果 .一个已命名的游标是和一条SELECT语句相关联.一个游标必须首先定义(同一个查询相关联),然后用三条可运行的SQL语句使用游标,以操纵数据.四条操纵游标的命令如下:.DECLRE CURSOR
.OPEN CURSOR
.FETCH
.CLOSE CURSORDECLARE CURSOR 语句用来定义一游标,此时游标处于关闭状态.用OPEN CURSOR语句打开游标后,就可用它从相关的查询中取出多于一行的结果.所有满足查询条件的行组成一个集合,叫做游标活动集.通过FETCH取操作,活动集中的每一行可以一个一个的返回,当查询作完后,游标就可以用CLOSE CURSOR 语句关闭.3.2.1DECLARE CURSOR 定义游标语句:ESQL中的DECLARE CURSOR语句定义游标,赋给它一个与查询相关的游标名.该语句的格式为:EXEC SQL DECLARE <游标名> CURSOR FOR
[FOR UPDATE];
其中:(1)SELECT语句应不含INTO子句.
(2)若无FOR UPDATE 则无法 执行UPDATE(定位)和DELETE(定位)语句.
定义游标的DECLARE语句必须出现在程序中对游标进行操作的所有语句之前, ESQL不能引 用没有说明的游标,游标的定义范围是整个程序.程序中可包含多个DECLARE语 句,这些语句定义了不同的游标,并把游标与不同的查询联系在一起,所以在同一个程序中的两个DECLARE语句中不能说明同一个游标名.3.2.2 OPEN CURSOR 打开游标语句ESQL中OPEN CURSOR语句格式如下:

EXEC SQL OPEN <游标名>;
OPEN语句决定了满足查询的行的集合,游标处于打开状态,它的活动集就是满足WHERE子句条件的行的集合.这时,游标处在活动集的第一行的 前面.
3.2.3 FETCH CURSOR 语句ESQL中的FETCH CURSOR语句读出活动集中的行,并把结果送到输出主变量,输出主变量是在相关的FETCH语句中定义的.其 格式如下:
EXEC SQL FETCH <游标名> INTO <主变量表>

游标必须先定义,然后再打开,只有当游标处于打开状态时,才执行FETCH语句.在第一次运行FETCH时,游标从活动集的第一行前移到当前第一行,使这一行成为当前行.每次运行FETCH时游标在活动集中向前移,把选出的结果送到主变量表中指定的输出主变量中.

推荐阅读