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

ESQL編程使用說明( 六 )


EXEC SQL CONNECT "cobase:cobase" ;EXEC SQL DECLARE cursor1 CURSOR FOR
SELECT SNO, SNAME, STATUS,CITY FROM S_TEST FOR UPDATE;
EXEC SQL OPEN cursor1;

printf("sno sname status cityn");
for(;;)
{
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(" update current ?(0/1)");
scanf("%d",&i);
if (i==1)
{printf("input sno=");
scanf("%s",sno);
printf("ninput sname=");
scanf("%s",sname);
printf("ninput status=");
scanf("%d",&status);
printf("ninput city=");
scanf("%s",city);
EXEC SQL UPDATE S_TEST SET sno=:sno,sname=:sname,status=:status,city=:city
WHERE CURRENT of cursor1;
EXEC SQL COMMIT;

}
}
EXEC SQL CLOSE cursor1;
EXEC SQL COMMIT;
EXEC SQL DISCONNECT;
}

第四章 提交/回滾事務(wù)
本章定義一事務(wù)或叫邏輯工作單元.為了保證數(shù)據(jù)庫(kù)的一致性,在ESQL程序中,程序開發(fā)人員可以控制事務(wù)是否提交或回滾.一事務(wù)通??梢岳斫鉃橐粋€(gè)完整程序?qū)?shù)據(jù)庫(kù)進(jìn)行的所有操作.一個(gè)事務(wù)也可以理解為是一個(gè)邏 輯工作單元.
4.1 邏輯工作單元一個(gè)邏輯工作單元是一組SQL語句和插入的主語言碼的集合.COBASE把它們作為一個(gè)整體來處理.
在邏輯工作單元這一級(jí)上,COBASE保證了數(shù)據(jù)的一致性,這就意味著要么完成所有的操作,要么每條語句都不執(zhí)行.
如果在處理一個(gè)邏輯工作單元期間出現(xiàn)了系統(tǒng)或用戶程序失敗,那么COBASE就自動(dòng)把數(shù)據(jù)恢復(fù)到該邏輯工作單元開始之前的狀態(tài),程序失敗時(shí),COBASE檢測(cè)完錯(cuò)誤就恢復(fù)數(shù)據(jù),若系統(tǒng)故障,COBASE在重新啟動(dòng)時(shí)恢復(fù)數(shù)據(jù).
當(dāng)遇 到第一個(gè)可執(zhí)行的SQL語句(除了CONNECT)時(shí),就隱含著一個(gè)邏輯工作單元的開始,COMMIT 和ROLLBACK語句結(jié)束一個(gè)邏輯工作單元.在ESQL程序中,說明語句并不開始一個(gè)邏輯單元.
COMMIT語句保證了當(dāng)前邏輯單元上的所有操作都完整地提交給了數(shù)據(jù)庫(kù).ROLLBACK語句取消對(duì)當(dāng)邏輯工作單元所作的操作 ,把數(shù)據(jù)庫(kù)恢復(fù)到當(dāng)前邏輯工作單元開始前的狀態(tài).
4.2 COMMIT 語句該語句結(jié)束當(dāng)前邏輯工作單元,把在邏輯工作單元期們的所有變化提 交給數(shù)據(jù)庫(kù) .其格式如下:EXEC SQL COMMIT;在程序結(jié)束之前,應(yīng)該明確地結(jié)束它的工作單元,否則,若程序成功結(jié)束后,COBASE自動(dòng)提交所有的變換,若程序非正常結(jié)束,就恢復(fù)到最近 沒有提交的邏輯工作單元.
COMMIT語句不影響主變量的內(nèi)容 或主程序的控制流.
每條DDL語句的執(zhí)行,自動(dòng)發(fā)出COMMIT操作,這就是說 ,DDL語句跟在DML語句后面,那么以前的DML語句就自動(dòng)提交組數(shù)據(jù)庫(kù).一個(gè)DDL語句結(jié)束當(dāng)前邏輯工作單元,釋放該程序擁有的所有鎖.
4.3 ROLLBACK語 句該語句將數(shù)據(jù)庫(kù)恢復(fù)到當(dāng)前邏輯工作單元之前的狀態(tài),結(jié)束當(dāng)前的邏輯工作單元.該語
句不影響主變量的內(nèi)容或主程序的控制流.其格式如下:EXEC SQL ROLLBACK;
4.4 DISCONNECT 語句當(dāng)應(yīng)用程序不再使用COBASE數(shù)據(jù)庫(kù)時(shí),應(yīng)該使用DISCONNECT語句釋放程序所有與COBASE數(shù)據(jù)庫(kù)有關(guān)的資源,并退出數(shù)據(jù)庫(kù),脫離COBASE環(huán)境.其格式如下:EXEC SQL DISCONNECT;

第 五 章 錯(cuò)誤檢測(cè)和恢復(fù)
本章我們介紹如何使用USERCA來進(jìn)行錯(cuò)誤檢測(cè)和處理 。
5.1 USERCA的結(jié)構(gòu)USERCA是ESQL程序用來傳送執(zhí)行信息的結(jié)構(gòu),每執(zhí)行完一條執(zhí)行性SQL語句, COBASE都把執(zhí)行信息寫入U(xiǎn)SERCA中,對(duì)于說明性SQL語句,則無執(zhí)行信息.謹(jǐn)慎的程序員應(yīng)該在每一SQL語句執(zhí)行完成后,檢查USERCA結(jié)構(gòu)中內(nèi)容來確信語句的執(zhí)行是否成功,并根據(jù)其中的信息作適當(dāng)?shù)奶幚?在ESQL中,USERCA的結(jié)構(gòu)如下:typedef struct
char caid[10]; /* userca ID */
long calen; /* userca length */
long sqlcode; /* sql code */
long sqltype; /* sql statement type */
int sqlerrmlen; /* sql error message length */

推薦閱讀