日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

ESQL編程使用說(shuō)明( 四 )


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 游標(biāo)的使用我們知道SQL語(yǔ)言是一種面向集合的語(yǔ)言,而普通的高級(jí)語(yǔ)言則是面向記錄的語(yǔ)言,要想使SQL語(yǔ)言能與宿主語(yǔ)言通訊,ESQL提供了游標(biāo)操作,能把SQL的集合操作結(jié)果,按單個(gè)記錄方式取出,賦于主變量進(jìn)行進(jìn)一步的處理.
如果查詢結(jié)果返回多行或不知返回多少行,就可使用帶游標(biāo)的SELECT語(yǔ)句.一個(gè)游標(biāo)(CURSOR)是一個(gè)COBASE和ESQL使用的工作區(qū)域,COBASE使用這個(gè)工作區(qū)存放著一個(gè)查詢結(jié)果 .一個(gè)已命名的游標(biāo)是和一條SELECT語(yǔ)句相關(guān)聯(lián).一個(gè)游標(biāo)必須首先定義(同一個(gè)查詢相關(guān)聯(lián)),然后用三條可運(yùn)行的SQL語(yǔ)句使用游標(biāo),以操縱數(shù)據(jù).四條操縱游標(biāo)的命令如下:.DECLRE CURSOR
.OPEN CURSOR
.FETCH
.CLOSE CURSORDECLARE CURSOR 語(yǔ)句用來(lái)定義一游標(biāo),此時(shí)游標(biāo)處于關(guān)閉狀態(tài).用OPEN CURSOR語(yǔ)句打開游標(biāo)后,就可用它從相關(guān)的查詢中取出多于一行的結(jié)果.所有滿足查詢條件的行組成一個(gè)集合,叫做游標(biāo)活動(dòng)集.通過(guò)FETCH取操作,活動(dòng)集中的每一行可以一個(gè)一個(gè)的返回,當(dāng)查詢作完后,游標(biāo)就可以用CLOSE CURSOR 語(yǔ)句關(guān)閉.3.2.1DECLARE CURSOR 定義游標(biāo)語(yǔ)句:ESQL中的DECLARE CURSOR語(yǔ)句定義游標(biāo),賦給它一個(gè)與查詢相關(guān)的游標(biāo)名.該語(yǔ)句的格式為:EXEC SQL DECLARE <游標(biāo)名> CURSOR FOR
[FOR UPDATE];
其中:(1)SELECT語(yǔ)句應(yīng)不含INTO子句.
(2)若無(wú)FOR UPDATE 則無(wú)法 執(zhí)行UPDATE(定位)和DELETE(定位)語(yǔ)句.
定義游標(biāo)的DECLARE語(yǔ)句必須出現(xiàn)在程序中對(duì)游標(biāo)進(jìn)行操作的所有語(yǔ)句之前, ESQL不能引 用沒有說(shuō)明的游標(biāo),游標(biāo)的定義范圍是整個(gè)程序.程序中可包含多個(gè)DECLARE語(yǔ) 句,這些語(yǔ)句定義了不同的游標(biāo),并把游標(biāo)與不同的查詢聯(lián)系在一起,所以在同一個(gè)程序中的兩個(gè)DECLARE語(yǔ)句中不能說(shuō)明同一個(gè)游標(biāo)名.3.2.2 OPEN CURSOR 打開游標(biāo)語(yǔ)句ESQL中OPEN CURSOR語(yǔ)句格式如下:

EXEC SQL OPEN <游標(biāo)名>;
OPEN語(yǔ)句決定了滿足查詢的行的集合,游標(biāo)處于打開狀態(tài),它的活動(dòng)集就是滿足WHERE子句條件的行的集合.這時(shí),游標(biāo)處在活動(dòng)集的第一行的 前面.
3.2.3 FETCH CURSOR 語(yǔ)句ESQL中的FETCH CURSOR語(yǔ)句讀出活動(dòng)集中的行,并把結(jié)果送到輸出主變量,輸出主變量是在相關(guān)的FETCH語(yǔ)句中定義的.其 格式如下:
EXEC SQL FETCH <游標(biāo)名> INTO <主變量表>

游標(biāo)必須先定義,然后再打開,只有當(dāng)游標(biāo)處于打開狀態(tài)時(shí),才執(zhí)行FETCH語(yǔ)句.在第一次運(yùn)行FETCH時(shí),游標(biāo)從活動(dòng)集的第一行前移到當(dāng)前第一行,使這一行成為當(dāng)前行.每次運(yùn)行FETCH時(shí)游標(biāo)在活動(dòng)集中向前移,把選出的結(jié)果送到主變量表中指定的輸出主變量中.

推薦閱讀