F = 0; return; }/* 如果是SELECT語(yǔ)句,則通過(guò)DESCRIBE函數(shù)返回列名、數(shù)據(jù)類(lèi)型、長(zhǎng)度和是否為NULL標(biāo)志*/ select_dp->N = M。完全版 ESQL/C資料三( 八 )。" />

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

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


(strncmp(dyn_statement, "select", 6) != 0))
{
select_dp->F = 0;
return;
}/* 如果是SELECT語(yǔ)句,則通過(guò)DESCRIBE函數(shù)返回列名、數(shù)據(jù)類(lèi)型、長(zhǎng)度和是否為NULL標(biāo)志*/
select_dp->N = MAX_ITEMS;
EXEC SQL DESCRIBE SELECT LIST FOR S INTO select_dp;
/* 如果F小于0 。則表示比預(yù)定的列數(shù)要多 。*/
if (select_dp->F < 0)
{
printf
("nToo many select-list items (%d), maximum is %dn",
-(select_dp->F), MAX_ITEMS);
return;
}
/* 設(shè)置最大列數(shù)為實(shí)際列數(shù)*/
select_dp->N = select_dp->F;
/* 為每列分配空間 。
SQLNumberPrecV6() 函數(shù)的作用是從select_dp->L[i]獲得精度和長(zhǎng)度 。
SQLColumnNullCheck() 函數(shù)的作用是檢查該列是否為NULL 。*/

printf ("n");
for (i = 0; i < select_dp->F; i)
{
/* 關(guān)閉最高位*/
SQLColumnNullCheck (&(select_dp->T[i]),
&(select_dp->T[i]), &null_ok);switch (select_dp->T[i])
{
case 1 : /* CHAR */
break;
case 2 : /* NUMBER ,獲得精度和范圍*/
SQLNumberPrecV6 (SQL_SINGLE_RCTX, &(select_dp->L[i]), &precision,
&scale);
/* 如果精度為0,則設(shè)置為最大值40 */
if (precision == 0) precision = 40;
if (scale > 0)
select_dp->L[i] = sizeof(float);
else
select_dp->L[i] = sizeof(int);
break;case 8 : /* LONG*/
select_dp->L[i] = 240;
break;case 11 : /* ROWID datatype */
select_dp->L[i] = 18;
break;case 12 : /* DATE datatype */
select_dp->L[i] = 9;
break;

case 23 : /* RAW datatype */
break;case 24 : /* LONG RAW datatype */
select_dp->L[i] = 240;
break;
}
/* 申請(qǐng)空間給SQLDA來(lái)存放數(shù)據(jù)*/
if (select_dp->T[i] != 2)
select_dp->V[i] = (char *) realloc(select_dp->V[i],
select_dp->L[i]1);
else
select_dp->V[i] = (char *) realloc(select_dp->V[i],
select_dp->L[i]);/* 輸出列名*/
if (select_dp->T[i] == 2)
if (scale > 0)
printf ("%.*s ",select_dp->L[i] 3, select_dp->S[i]);
else
printf ("%.*s ", select_dp->L[i], select_dp->S[i]);
else
printf ("%-.*s ", select_dp->L[i], select_dp->S[i]);/* 除了LONG RAW和NUMBER,其他數(shù)據(jù)類(lèi)型轉(zhuǎn)換為字符型數(shù)據(jù)類(lèi)型*/
if (select_dp->T[i] != 24 && select_dp->T[i] != 2)
select_dp->T[i] = 1;/* 將 NUMBER數(shù)據(jù)類(lèi)型轉(zhuǎn)換為浮點(diǎn)型數(shù)據(jù)類(lèi)型或int數(shù)據(jù)類(lèi)型*/
if (select_dp->T[i] == 2)
if (scale > 0)
select_dp->T[i] = 4; /* float */
else
select_dp->T[i] = 3; /* int */
}
printf ("nn");/* 取出每一行數(shù)據(jù)*/
EXEC SQL WHENEVER NOT FOUND GOTO end_select_loop;
for (;;)
{
EXEC SQL FETCH C USING DESCRIPTOR select_dp;/*輸出列數(shù)據(jù) 。除了float和int數(shù)據(jù)類(lèi)型,其他數(shù)據(jù)類(lèi)型都被轉(zhuǎn)為字符型*/
for (i = 0; i < select_dp->F; i)
{
if (*select_dp->I[i] < 0)
if (select_dp->T[i] == 4)
printf ("%-*c ",(int)select_dp->L[i] 3, " ");
else
printf ("%-*c ",(int)select_dp->L[i], " ");
else
if (select_dp->T[i] == 3) /* int datatype */
printf ("%*d ", (int)select_dp->L[i],
*(int *)select_dp->V[i]);
else if (select_dp->T[i] == 4)/* float datatype*/
printf ("%*.2f ", (int)select_dp->L[i],
*(float *)select_dp->V[i]);
else /* character string */
printf ("%-*s ",
(int)select_dp->L[i], select_dp->V[i]);
}
printf ("n");
}
end_select_loop:
return;
}help()
{
puts("nnEnter a SQL statement or a PL/SQL block");
puts("at the SQL> prompt.");
puts("Statements can be continued over several");
puts("lines, except within string literals.");
puts("Terminate a SQL statement with a semicolon.");
puts("Terminate a PL/SQL block");
puts("(which can contain embedded semicolons)");
puts("with a slash (/).");
puts("Typing "exit" (no semicolon needed)");
puts("exits the program.");
puts("You typed "?" or "help"");
puts(" to get this message.nn");
}
sql_error()
{
int i;/* ORACLE error handler */
printf ("nn%.70sn",sqlca.sqlerrm.sqlerrmc);
if (parse_flag)
printf("Parse error at character offset %d.n",
sqlca.sqlerrd[4]);EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK WORK;

推薦閱讀