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

完全版 ESQL/C資料二


第三節(jié) IBM DB2嵌入SQL語言
DB2支持SQL嵌入到C/C、JAVA、COBOL、FORTRAN和REXX等語言 。本節(jié)以SQL嵌入C/C為例子,講解靜態(tài)的嵌入SQL編程和動態(tài)的嵌入SQL編程 。
靜態(tài)SQL嵌入C語言編程是指,應(yīng)用程序在書寫時,每個SQL語句的大部分都已確定下來(如:查詢的表、列和語句的格式等),唯一不確定的是查詢語句中某些特定變量的值,這些值可以在執(zhí)行時由變量傳進(jìn)去,但是,值的類型要事先確定 。
3.1 一個簡單示例
首先,我們來看一個嵌入靜態(tài)SQL語句的C程序 。
例1、連接到SAMPLE數(shù)據(jù)庫,查詢LASTNAME為JOHNSON的FIRSTNAME信息 。
#include
#include
#include
#include "util.h"
#include
EXEC SQL INCLUDE SQLCA; (1)
#define CHECKERR(CE_STR) if (check_error (CE_STR, &sqlca) != 0) return 1;
int check_error (char eString[], struct sqlca *caPointer) {
char eBuffer[1024];
char sBuffer[1024];
short rc, Erc;
if (caPointer->sqlcode != 0) {
printf ("--- error report ---n");
printf ("ERROR occured : %s.nSQLCODE : %ldn", eString,
caPointer->sqlcode);
}
return 0;
}
int main(int argc, char *argv[]) {
EXEC SQL BEGIN DECLARE SECTION; (2)
char firstname[13];
char userid[9];
char passwd[19];
EXEC SQL END DECLARE SECTION;
printf( "Sample C program: STATICn" );
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: static [userid passwd]nn");
return 1;
} /* endif */

EXEC SQL SELECT FIRSTNME INTO :firstname
FROM employee
WHERE LASTNAME = "JOHNSON";(4)
CHECKERR ("SELECT statement"); (5)
printf( "First name = %sn", firstname );
EXEC SQL CONNECT RESET; (6)
CHECKERR ("CONNECT RESET");
return 0;
}
/* end of program : STATIC.SQC */上面是一個簡單的靜態(tài)嵌入SQL語句的應(yīng)用程序 。它包括了靜態(tài)嵌入SQL的主要部分 。
(1)中的include SQLCA語句定義并描述了SQLCA的結(jié)構(gòu) 。SQLCA用于應(yīng)用程序和數(shù)據(jù)庫之間的通訊,其中的SQLCODE返回SQL語句執(zhí)行后的結(jié)果狀態(tài) 。
(2)在BEGIN DECLARE SECTION和END DECLARE SECTION之間定義了主變量 。主變量可被SQL語句引用,也可以被C語言語句引用 。它用于將程序中的數(shù)據(jù)通過SQL語句傳給數(shù)據(jù)庫管理器,或從數(shù)據(jù)庫管理器接收查詢的結(jié)果 。在SQL語句中,主變量前均有“:”標(biāo)志以示區(qū)別 。
(3)在每次訪問數(shù)據(jù)庫之前必須做CONNECT操作,以連接到某一個數(shù)據(jù)庫上 。這時,應(yīng)該保證數(shù)據(jù)庫實(shí)例已經(jīng)啟動 。
(4)是一條選擇語句 。它將表employee中的LASTNAME為“JOHNSON”的行數(shù)據(jù)的FIRSTNAME查出,并將它放在firstname變量中 。該語句返回一個結(jié)果 。可以通過游標(biāo)返回多個結(jié)果 。
(5)在該程序中通過調(diào)用宏CHECKERR(即調(diào)用函數(shù)check_error)來返回SQL語句執(zhí)行的結(jié)果 。Check_error函數(shù)在下面講解 。
(6)最后斷開數(shù)據(jù)庫的連接 。
從上例看出,每條嵌入式SQL語句都用EXEC SQL開始,表明它是一條SQL語句 。這也是告訴預(yù)編譯器在EXEC SQL和“;”之間是嵌入SQL語句 。如果一條嵌入式SQL語句占用多行,在C程序中可以用續(xù)行符“” 。
3.2 嵌入SQL語句
3.2.1宿主變量
1)、聲明方法
宿主變量就是在嵌入式SQL語句中引用主語言說明的程序變量(如上例中的firstname變量) 。如:
………….
EXEC SQL SELECT FIRSTNME INTO :firstname (4)
FROM employee
WHERE LASTNAME = "JOHNSON";
………….
在嵌入式SQL語句中使用宿主變量前,必須采用BEGIN DECLARE SECTION 和END DECLARE SECTION之間給宿主變量說明 。這兩條語句不是可執(zhí)行語句,而是預(yù)編譯程序的說明 。宿主變量是標(biāo)準(zhǔn)的C程序變量 。嵌入SQL語句使用宿主變量把數(shù)據(jù)庫中查詢到的值返回給應(yīng)用程序(稱為輸出宿主變量),也用于將程序中給定的值傳到SQL語句中(稱為輸入宿主變量) 。顯然,C程序和嵌入SQL語句都可以訪問宿主變量 。

推薦閱讀