返回首页

gbase数据、南大通用产品文档:GBase8srtypsize() 函数

更新日期:2024年09月11日

对于使用
“更改数据捕获”
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;

语法
DECLARE cursor_name REF CURSOR
表5- 184 参数说明
参数名称


cursor_name
要创建的游标的名称,游标名只允许a~z、A~Z、0~9、下
划线,且不能只包含数字;
注意

使用DECLARE 定义动态游标时,不允许指定任何SELECT 语句。
示例
DECLARE cur REF CURSOR;

您可以将 SET ENCRYPTION PASSWORD 语句与内置 SQL 加密函数(使用 Advanced
Encryption Standard (AES)
和 Triple DES (3DES)
加密)
一起使用来保护您的敏感数据。
如果使用加密,只有拥有正确密码的用户才能读取、复制或修改数据。
将SET ENCRYPTION PASSWORD 语句与下列内置加密和解密函数一起使用 :

ENCRYPT_AES
ENCRYPT_AES(data-string-expression
[, password-string-expression [, hint-string-expression ]])


ENCRYPT_TDES
ENCRYPT_TDES (data-string-expression
[, password-string-expression [, hint-string-expression ]])


GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 113 -

DECRYPT_CHAR
DECRYPT_CHAR(EncryptedData [, PasswordOrPhrase])

DECRYPT_BINARY
DECRYPT_BINARY(EncryptedData [, PasswordOrPhrase])

GETHINT
GETHINT(EncryptedData)
如果您使用了 SET ENCRYPTION PASSWORD 语句来指定缺省密码,那么数据库服务器
将该密码应用于同一会话中调用的对加密和解密函数的后续调用中。
使用 ENCRYPT_AES 和 ENCRYPT_TDES 定义加密的数据,使
用 DECRYPT_CHAR 和 DECRYPT_BINARY 查询加密的数据。
使用 GETHINT 显示密码提
示符(如果在服务器上设置了该字符串)。
可以使用这些 SQL 内置函数来实现列级别或单元级别加密。
使用列级别加密,用相同的密码为给定列上的所有值加密。
使用单元级别加密,用不同的密码为列内的数据加密。
提示: 如果想从大型表中选择加密数据,请指定未加密的列。在其中选择行,可对包含加密数
据的列创建索引或外键约束,但是这样做对资源使用的效率较低,原因是查询优化器不使用此
类索引和外键约束。