对于使用
“更改数据捕获”
API 的客户机,
rtypsize() 函数返回数据的内部存储大小。
语法
mint rtypsize(sqltype, sqllen)
mint sqltype;
mint sqllen;
sqltype
GBase 8s ESQL/C 或 SQL 数据类型的整数代码。
sqllen
对于指定的数据类型,数据文件中的字节数。
用法
尽管类似于 rtypmsize() 函数,
但 rtypsize() 函数返回内部的服务器存储长度,
而不是
ESQL/C 数据长度。
随同 DESCRIBE 语句初始化的 sqlda 结构,提供 rtypsize() 函数来使用。在
DESCRIBE 语句确定列信息之后,sqltype 和 sqllen 组件的值在每一 sqlda.sqlvar 结构中
同名的组件中。
在 demo 目录中的 cdcapi.ec 样例程序中,您可看到 rtypsize() 函数的应用。
返回代码
0
sqltype 不是有效的 SQL 类型。
>0
返回值是 sqltype 数据类型要求的字节数。
示例
GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 922 -
下列代码片段来自 demo 目录中的 cdcapi.ec 文件,展示 rtypsize() 函数的使用。
sprintf(sql_stm, "select * from %s", tabname);
$prepare select_id from $sql_stm;
CHK_SQL_CODE(sql_stm);
$describe select_id into sqlda;
CHK_SQL_CODE("Describe");
/*
* Save the description of the column descriptor for the table.
* We will use this later to process the insert/update/delete records
* for this table.
*/
for (col = 0; col < sqlda->sqld; col++)
{
colsize = rtypsize(sqlda->sqlvar[col].sqltype,
sqlda->sqlvar[col].sqllen); printStdoutAndFile("\tColumn %d is %s, type = %d,
size =%d\n", col,sqlda->sqlvar[col].sqlname,sqlda->sqlvar[col].sqltype, colsize);
coldesc.colobj[col].coltype = sqlda->sqlvar[col].sqltype;
coldesc.colobj[col].colsize = colsize;
coldesc.colobj[col].colxid = sqlda->sqlvar[col].sqlxid;
coldesc.colobj[col].colname =
malloc(strlen(sqlda->sqlvar[col].sqlname)+1);
strcpy(coldesc.colobj[col].colname,
sqlda->sqlvar[col].sqlname);
}
coldesc.num_of_columns = col;