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

完全版 ESQL/C資料二( 三 )


#include
#include
#include
#include "util.h"
EXEC SQL INCLUDE SQLCA;
#define CHECKERR(CE_STR) if (check_error (CE_STR, &sqlca) != 0) return 1;
int main(int argc, char *argv[]) {
EXEC SQL BEGIN DECLARE SECTION;
char pname[10];
short dept;
char userid[9];
char passwd[19];
EXEC SQL END DECLARE SECTION;
printf( "Sample C program: CURSOR n" );
if (argc == 1) {
EXEC SQL CONNECT TO sample;
CHECKERR ("CONNECT TO SAMPLE");
}
else if (argc == 3) {
strcpy (userid, argv[1]);
strcpy (passwd, argv[2]);
EXEC SQL CONNECT TO sample USER :userid USING :passwd;
CHECKERR ("CONNECT TO SAMPLE");
}
else {
printf ("nUSAGE: cursor [userid passwd]nn");
return 1;
} /* endif */

EXEC SQL DECLARE c1 CURSOR FOR (1)
SELECT name, dept FROM staff WHERE job="Mgr"
FOR UPDATE OF job;
EXEC SQL OPEN c1; (2)
CHECKERR ("OPEN CURSOR");
do {
EXEC SQL FETCH c1 INTO :pname, :dept; (3)
if (SQLCODE != 0) break;
printf( "%-10.10s in dept. - will be demoted to Clerkn",
pname, dept );
} while ( 1 );
EXEC SQL CLOSE c1; (4)
CHECKERR ("CLOSE CURSOR");
EXEC SQL ROLLBACK;
CHECKERR ("ROLLBACK");
printf( "nOn second thought -- changes rolled back.n" );
EXEC SQL CONNECT RESET;
CHECKERR ("CONNECT RESET");
return 0;
}
/* end of program : CURSOR.SQC */
在上面這個程序中,
(1)定義了一個游標(biāo),并指明游標(biāo)的名字為C1,同時給出了相對于游標(biāo)的查詢語句和游標(biāo)類型(UPDATE) 。
(2)打開游標(biāo) 。系統(tǒng)執(zhí)行查詢語句,建立結(jié)果表,將游標(biāo)指針指向第一條記錄之前 。
(3)FETCH語句將指針的下一條記錄取出,將記錄中的數(shù)據(jù)存放在相應(yīng)的宿主變量中 。同時指針下移 。
(4)用CLOSE關(guān)閉游標(biāo) 。3.2.4插入、刪除和修改操作
DB2中的插入、刪除和修改操作同SQL語句中INSERT、DELETE和UPDATE語句類似 。只需在相應(yīng)的SQL語句前加上EXEC SQL即可 。請看下面這個例子:
例、將staff表中所有工作為“Mgr”的職工的工作改變?yōu)椤癱lerk”,并將staff表中所有工作為“sale”的職工信息刪除 。最后插入一新行 。
#include
#include
#include
#include
#include "util.h"
EXEC SQL INCLUDE SQLCA; (1)
#define CHECKERR(CE_STR) if (check_error (CE_STR, &sqlca) != 0) return 1;
int main(int argc, char *argv[]) {
EXEC SQL BEGIN DECLARE SECTION; (2)
char statement[256];
char userid[9];
char passwd[19];
char jobUpdate[6];
EXEC SQL END DECLARE SECTION;
printf( "nSample C program: UPDAT n");
if (argc == 1) {
EXEC SQL CONNECT TO sample;
CHECKERR ("CONNECT TO SAMPLE");
}
else if (argc == 3) {
strcpy (userid, argv[1]);
strcpy (passwd, argv[2]);
EXEC SQL CONNECT TO sample USER :userid USING :passwd; (3)
CHECKERR ("CONNECT TO SAMPLE");
}
else {
printf ("nUSAGE: updat [userid passwd]nn");
return 1;
} /* endif */
strcpy (jobUpdate, "Clerk");
EXEC SQL UPDATE staff SET job = :jobUpdate WHERE job = "Mgr"; (4)
CHECKERR ("UPDATE STAFF");
printf ("All "Mgr" have been demoted to "Clerk"!n" );
strcpy (jobUpdate, "Sales");
EXEC SQL DELETE FROM staff WHERE job = :jobUpdate; (5)
CHECKERR ("DELETE FROM STAFF");
printf ("All "Sales" people have been deleted!n");
EXEC SQL INSERT INTO staff
VALUES (999, "Testing", 99, :jobUpdate, 0, 0, 0); (6)
CHECKERR ("INSERT INTO STAFF");
printf ("New data has been insertedn");
EXEC SQL ROLLBACK; (7)
CHECKERR ("ROLLBACK");
printf( "On second thought -- changes rolled back.n" );
EXEC SQL CONNECT RESET;
CHECKERR ("CONNECT RESET");
return 0;
}
/* end of program : UPDAT.SQC */
上述語句:
(1)包含SQLCA結(jié)構(gòu) 。該結(jié)構(gòu)用于將SQL語句執(zhí)行的結(jié)果信息返回給應(yīng)用程序 。
(2)宿主變量定義 。
(3)連接到DB2的SAMPLE數(shù)據(jù)庫 。
(4)UPDATE語句將staff表中所有工作為“Mgr”的職工的工作改變?yōu)椤癱lerk” 。
(5)DELETE語句將staff表中所有工作為“sale”的職工信息刪除 。

推薦閱讀