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

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


int size;
int max_vname_len;
int max_iname_len;
{
int i;
/*SQLSQLDAAlloc的第一個(gè)參數(shù)是SQL語句的最大列數(shù)或輸入宿主變量的最大個(gè)數(shù) 。
*第二個(gè)參數(shù),是指列名的最大長(zhǎng)度,或參數(shù)名的最大長(zhǎng)度 。
*第三個(gè)參數(shù),是指指示符變量名的最大長(zhǎng)度 。*/
/*給SQLDA分配空間,下面這個(gè)SQLDA用于輸入?yún)?shù)*/
if ((bind_dp =
SQLSQLDAAlloc(SQL_SINGLE_RCTX, size,
max_vname_len, max_iname_len)) == (SQLDA *) 0)
{
fprintf(stderr, "Cannot allocate memory for bind descriptor.");
return -1; /* Have to exit in this case. */
}
/*給SQLDA分配空間,下面這個(gè)SQLDA用于動(dòng)態(tài)查詢*/
if ((select_dp =
SQLSQLDAAlloc (SQL_SINGLE_RCTX, size,
max_vname_len, max_iname_len)) == (SQLDA *) 0)
{
fprintf(stderr,"Cannot allocate memory for select descriptor.");
return -1;
}
/*設(shè)置最大的列數(shù),或最大的變量數(shù)*/
select_dp->N = MAX_ITEMS;/* 給存放指示符變量值和存放數(shù)據(jù)的變量申請(qǐng)空間 。*/
for (i = 0; i < MAX_ITEMS; i) {
bind_dp->I[i] = (short *) malloc(sizeof (short));
select_dp->I[i] = (short *) malloc(sizeof(short));
bind_dp->V[i] = (char *) malloc(1);
select_dp->V[i] = (char *) malloc(1);
}
return 0;
}
/*獲得SQL語句,可略看*/
get_dyn_statement()
{
char *cp, linebuf[256];
int iter, plsql;
int help();
for (plsql = 0, iter = 1; ;)
{
if (iter == 1)
{
printf("nSQL> ");
dyn_statement[0] = "";
}

fgets(linebuf, sizeof linebuf, stdin);
fflush(stdin);cp = strrchr(linebuf, "n");
if (cp && cp != linebuf)
*cp = " ";
else if (cp == linebuf)
continue;
if ((strncmp(linebuf, "EXIT", 4) == 0) ||
(strncmp(linebuf, "exit", 4) == 0))
{
return -1;
}
else if (linebuf[0] == "?" ||
(strncmp(linebuf, "HELP", 4) == 0) ||
(strncmp(linebuf, "help", 4) == 0))
{
help();
iter = 1;
continue;
}
if (strstr(linebuf, "BEGIN") ||
(strstr(linebuf, "begin")))
{
plsql = 1;
}
strcat(dyn_statement, linebuf);
if ((plsql && (cp = strrchr(dyn_statement, "/"))) ||
(!plsql && (cp = strrchr(dyn_statement, ";"))))
{
*cp = "";
break;
}
else
{
iter;
printf("= ", iter);
}
}
return 0;
}
/*設(shè)置宿主變量的信息*/
set_bind_variables()
{
int i, n;
char bind_var[64];/* 通過DESCRIBE語句,將處理語句的參數(shù)名、數(shù)據(jù)類型等信息存放在bind_dp中*/
EXEC SQL WHENEVER SQLERROR DO sql_error();
bind_dp->N = MAX_ITEMS; /* Init. count of array elements. */
EXEC SQL DESCRIBE BIND VARIABLES FOR S INTO bind_dp;
/* F小于0,表示SQLSQLDAAlloc()分配的空間不夠,即實(shí)際參數(shù)的個(gè)數(shù)超出預(yù)算的最大值. */
if (bind_dp->F < 0)
{
printf("nToo many bind variables (%d), maximum is %d.n",
-bind_dp->F, MAX_ITEMS);
return;
}
/* 將N(最大值)設(shè)置為實(shí)際的參數(shù)個(gè)數(shù)*/
bind_dp->N = bind_dp->F;
/* 提示用戶輸入?yún)?shù)值,并設(shè)置SQLDA的其他相關(guān)值,如:長(zhǎng)度等 。*/
for (i = 0; i < bind_dp->F; i)
{
printf ("nEnter value for bind variable %.*s: ",
(int)bind_dp->C[i], bind_dp->S[i]);
fgets(bind_var, sizeof bind_var, stdin);/* 獲得長(zhǎng)度,去掉NULL結(jié)束符 */
n = strlen(bind_var) - 1;
/*設(shè)置參數(shù)長(zhǎng)度 */
bind_dp->L[i] = n;
/* 分配存放參數(shù)數(shù)據(jù)的內(nèi)存空間 */
bind_dp->V[i] = (char *) realloc(bind_dp->V[i], (bind_dp->L[i]1));
/* 將數(shù)據(jù)放在這個(gè)內(nèi)存空間中 */
strncpy(bind_dp->V[i], bind_var, n);
/* 設(shè)置指示符變量的值*/
if ((strncmp(bind_dp->V[i], "NULL", 4) == 0) ||
(strncmp(bind_dp->V[i], "null", 4) == 0))
*bind_dp->I[i] = -1;
else
*bind_dp->I[i] = 0;
/* 設(shè)置數(shù)據(jù)類型為CHAR,ORACLE會(huì)根據(jù)列的數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換 */
bind_dp->T[i] = 1;
}
}
/*處理語句*/
process_select_list()
{
int i, null_ok, precision, scale;
/*如果不是查詢語句,則設(shè)置F(即返回的列數(shù))為0*/
if ((strncmp(dyn_statement, "SELECT", 6) != 0) &&

推薦閱讀