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

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


*/
{
#line 44 "demodb2.sqc"
sqlastrt(sqla_program_id, &sqla_rtinfo, &sqlca);
#line 44 "demodb2.sqc"
sqlaaloc(3,1,3,0L);
{
struct sqla_setd_list sql_setdlist[1];
#line 44 "demodb2.sqc"
sql_setdlist[0].sqltype = 460; sql_setdlist[0].sqllen = 13;
#line 44 "demodb2.sqc"
sql_setdlist[0].sqldata = https://www.rkxy.com.cn/dnjc/(void*)firstname;
#line 44 "demodb2.sqc"
sql_setdlist[0].sqlind = 0L;
#line 44 "demodb2.sqc"
sqlasetd(3,0,1,sql_setdlist,0L);
}
#line 44 "demodb2.sqc"
sqlacall((unsigned short)24,1,0,3,0L);
#line 44 "demodb2.sqc"
sqlastop(0L);
}#line 44 "demodb2.sqc"CHECKERR ("SELECT statement");
printf( "First name = %sn", firstname );

/*
EXEC SQL CONNECT RESET;
*/
{
#line 47 "demodb2.sqc"
sqlastrt(sqla_program_id, &sqla_rtinfo, &sqlca);
#line 47 "demodb2.sqc"
sqlacall((unsigned short)29,3,0,0,0L);
#line 47 "demodb2.sqc"
sqlastop(0L);
}
#line 47 "demodb2.sqc"
CHECKERR ("CONNECT RESET");
return 0;
}
/* end of program : STATIC.SQC */
生成的BIND文件為demodb2.bnd 。
3.4 DB2的動(dòng)態(tài)SQL嵌入語句
所謂靜態(tài)SQL的編程方法,就是指在預(yù)編譯時(shí)SQL語句已經(jīng)基本確定,即訪問的表或視圖名、訪問的列等信息已經(jīng)確定 。但是,有時(shí)整個(gè)SQL語句要到執(zhí)行的時(shí)候才能確定下來,而且SQL語句所訪問的對(duì)象也要到執(zhí)行時(shí)才能確定 。這就需要通過動(dòng)態(tài)SQL語句完成 。
3.4.1 基本方法
執(zhí)行動(dòng)態(tài)SQL語句的程序,主要有三條語句來完成:
1)、PREPARE語句 。由于動(dòng)態(tài)SQL語句在執(zhí)行時(shí)才能確定,所以DB2中使用一個(gè)字符型的宿主變量來存放相應(yīng)的SQL語句 。但是,這條語句在預(yù)編譯時(shí)不存在,因而在預(yù)編譯時(shí)無法編譯這個(gè)SQL語句 。但是,存放在宿主變量中的語句必須轉(zhuǎn)化為可執(zhí)行的格式后才能執(zhí)行 。PREPARE命令的作用是完成編譯的工作 。即相當(dāng)于靜態(tài)SQL中的BIND操作,在數(shù)據(jù)庫管理器中生成PACKAGE,并給出一個(gè)語句的名字 。在后面的DESCRIBE、EXECUTE和OPEN等命令都使用這個(gè)名字來訪問相應(yīng)的SQL語句 。SQL語句在做PREPARE操作時(shí),不可使用宿主變量來表示參數(shù),但可以在相應(yīng)的位置上使用“?”來表示該位置上應(yīng)該有一個(gè)參數(shù) 。PREPARE還將生成相應(yīng)的SQLDA結(jié)構(gòu) 。
2)、EXECUTE語句 。該語句的作用是執(zhí)行已經(jīng)做過PREPARE操作的SQL語句 。在EXECUTE語句中,將針對(duì)PREPARE語句中的每個(gè)參數(shù)標(biāo)志給出相應(yīng)的參數(shù)值,這些參數(shù)值可以有宿主變量傳遞,他們的類型應(yīng)該匹配 。EXECUTE命令不能做SELECT操作,這是因?yàn)镋XECUTE語句無法返回結(jié)果,要執(zhí)行SELECT操作,應(yīng)該通過游標(biāo)完成 。
EXECUTE IMMEDIATE語句是PERPARE語句和EXECUTE語句的綜合,它對(duì)語句做PREPARE,生成可執(zhí)行模式,在執(zhí)行 。
3)、DESCRIBE語句 。將執(zhí)行過的PREPARE的SQL語句結(jié)果信息存放在SQLDA結(jié)構(gòu) 。
例、查詢表名不是STAFF的表信息 。
#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 table_name[19];
/*st[80]宿主變量存放SQL語句*/
char st[80];
char parm_var[19];
char userid[9];
char passwd[19];
EXEC SQL END DECLARE SECTION;
printf( "Sample C program: DYNAMICn" );
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: dynamic [userid passwd]nn");
return 1;
} /* endif */
strcpy( st, "SELECT tabname FROM syscat.tables" );
strcat( st, " WHERE tabname <> ?" );
/*對(duì)st做PREPARE操作,st中的“?”表示參數(shù)*/
EXEC SQL PREPARE s1 FROM :st;
CHECKERR ("PREPARE");

推薦閱讀