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

ESQL編程使用說明( 五 )


如果游標活動集中是空的,或所有的行已經(jīng)被取走,COBASE就返回一代碼.(USERCA.SQLCODE==2000).
游標只可在活動集中向前移動,COBASE無法取到已經(jīng)用FETCH取過的行,要想再取這一行,就必須關閉游標,再重新打開它.
3.2.4 CLOSE CURSOR 關閉游標語句當取完活動集中所有行后,必須關閉游標,以釋放與該游標的關的資源.其格式如下:EXEC SQL CLOSE <游 標名>;例題程序5 (使用游標的查詢)/*=============================================================================
This is a sample program which uses Cursor.Include DECLARE,
OPEN,FETCH and CLOSE cursor name.
It is an example of how to do queries that return more than
one row.
==============================================================================*/
EXEC SQL BEGIN DECLARE SECTION ;
INT status;
CHAR sno[10],sname[15],city[20];
EXEC SQL END DECLARE SECTION ;
EXEC SQL INCLUDE USERCA;main()
{
int i;
printf("Now exec connect ...");
EXEC SQL CONNECT "cobase:cobase" ; /* log into COBASE */printf("Now exec declare_open_fetch_close cursor ...");
/* Declare statement name ---"s1" for INSERT statement */EXEC SQL DECLARE cursor1 CURSOR FOR SELECT * FROM S_TEST;EXEC SQL OPEN cursor1 ;printf("sno sname status cityn ");do
{EXEC SQL FETCH cursor1 INTO :sno,:sname,:status,:city ;
If (userca.sqlcode==2000) break;
printf("%8s %8s ?%8s n",sno,sname,status,city);getchar();
}while(1);EXEC SQL CLOSE cursor1 ;
EXEC SQL COMMIT;
EXEC SQL DISCONNECT;
}3.3 定位修改和刪除語句COBASE支持SQL格式" CURRENT OF CURSOR".這條語句將指向一個游標中最新取出的行,以用于修改和刪除操作.該語句必須在取操作之后使用 ,它等同于存儲一個ROWID,并使用它.其格式如下:(1) EXEC SQL
UPDATE <表名>
SET <列名> = <值表達式> | NULL
[,<列名> = <值表達式> | NULL ....]
WHERE CURRENT OF <游標名> ;
(2) EXEC SQL
UPDATE <表名>
SET ( <列名表> ) = ( <子查詢> )
WHERE CURRENT OF <游標名> ;
(3) EXEC SQL DELETE FROM <表名>
WHERE CURRENT OF <游標名> ;這些語句執(zhí)行在游標名的當前行下更新或修改.其中在值表達式或子查詢中出現(xiàn)的主變量前應有":"標志.例題程序6 (定位刪除)/*==============================================================================
This is a sample program which uses DELETE STATEMENT at
CURRENT Cursor.
==============================================================================*/
EXEC SQL BEGIN DECLARE SECTION ;
INT status;
CHAR sno[10],sname[15],city[20];
EXEC SQL END DECLARE SECTION ;
EXEC SQL INCLUDE USERCA;main()
{
int i;
printf("Now exec connect ...");
EXEC SQL CONNECT "COBASE:COBASE" ;printf("Now exec declare cursor ...");
EXEC SQL DECLARE cursor1 CURSOR FOR
SELECT sno,sname,status,city FROM S_TEST FOR UPDATE;
printf("Now exec open cursor ...");
EXEC SQL OPEN cursor1;
printf("sno sname status cityn");
for(;;)
{
printf("Now exec fetch cursor ...n");
EXEC SQL FETCH cursor1 INTO :sno,:sname,:status,:city;
if (userca.sqlcode==2000) break;
printf("%8s %8s ?%8s n",sno,sname,status,city);


//Delete the first record that be fetched
printf(" delete current ?(0/1)");
scanf("%d",&i);
if (i==1)
EXEC SQL DELETE FROM S_TEST
WHERE CURRENT of cursor1;
}EXEC SQL CLOSE cursor1;
EXEC SQL COMMIT;
EXEC SQL DISCONNECT;
}
例題程序7 (定位修改)
/*=============================================================================
This is a sample program which uses UPDATE STATEMENT at
CURRENT Cursor.
==============================================================================*/
EXEC SQL BEGIN DECLARE SECTION ;
INT status;
CHAR sno[10],sname[15],city[20];
EXEC SQL END DECLARE SECTION ;
EXEC SQL INCLUDE USERCA;main()
{
int i;strcpy(sno,"ttttt");
strcpy(sname,"ttttt");
strcpy(city,"ttttt");
status=1000;

推薦閱讀