返回首页

gbase数据、南大通用产品文档:GBase8aM

更新日期:2024年09月11日

903M
1% /run
tmpfs
tmpfs
912M
0
912M
0%
/sys/fs/cgroup
/dev/sda1
xfs
1014M
173M
842M
18% /boot
tmpfs
tmpfs
183M



sword GCIHandleAlloc(
dvoid *parenth,
dvoid **hndlpp,
CONST ub4 type,
CONST size_t xtramem_sz,
dvoid **usrmempp
);

分配并初始化各类句柄。



GBase 8s GCI 接口使用指南

南大通用数据技术股份有限公司 23

参数
输入
/输出


parenth
输入
一个环境句柄的指针,从该句柄上可以分配其他类型的句柄
hndlpp
输出
返回新分配的句柄指针
type
输入
指定要从环境句柄上分配的句柄类型,有:
GCI_HTYPE_SERVER:分配一个GCIServer结构的句
柄,该句柄上存放建立的连接句柄
GCI_HTYPE_SESSION :分配一个GCISession结构的句
柄, 该句柄上存放建立连接所需的登录信息, 如用户名
和密码等
GCI_HTYPE_SVCCTX :分配一个GCISvcCtx结构的句
柄(上下文句柄) ,该句柄上存放的是其他各类句柄的
关联信息
GCI_HTYPE_STMT:分配一个GCIStmt结构的句柄(语
句句柄) ,分配该句柄时,环境句柄上必须已经建立了
上下文句柄,并已连接到服务器
GCI_HTYPE_DIRPATH_CTX:分配一个GCIDirPathCtx
结构句柄(直接文件操作环境上下文)
GCI_HTYPE_DIRPATH_COLUMN_ARRAY:分配一个
GCIDirPathColArray结构句柄(数据数组描述符)
GCI_HTYPE_DIRPATH_STREAM:分配一个
GCIDirPathStream结构句柄(数据流描述符)
GCI_HTYPE_ERROR:分配一个GCIError结构的句柄
(错误句柄) ,该句柄存放操作失败后的错误码和相关
错误信息
GCI_HTYPE_DESCRIBE:分配一个GCIDescribe结构的
句柄(描述符句柄) ,该句柄存放数据库对象描述符操
作信息
xtramem_sz
输入
保留参数, 目前不使用(仅用于和Oracle保持兼容)
usrmempp
输入
保留参数, 目前不使用(仅用于和Oracle保持兼容)

如果执行成功, 返回GCI_SUCCESS,否则返回GCI_ERROR。 注释:

调用该函数分配句柄成功以后,需要在程序的最后调用GCIHandleFree来释放相应的句柄

GBase 8s主要支持以下字符串类型及对应SQLT类型:


C
(64位系统
)


SQLT类型

Char[n]
1
CHAR(n) /NCHARn<=32767
SQLT_CHR/
SQLT_STR/
SQLT_AVC/
SQLT_AFC/
SQLT_VCS
CHAR[N]

Varcar(n)/NVARCHAR,n
<=255
CHAR[N]
2048
LVARCHAR(N) n<32739

在GCI接口中,访问GBase 8s系统中的字符串类型数据,类型指定为SQLT_CHR,SQLT_STR

SQLT_AVC ,SQLT_VCS时效果是相同的,并没有区别。

但在不同厂家配置中,GCI接口返回字符串类型会有所不同:


factory
SQLT

1
SQLT_STR
CHAR
1
SQLT_STR
VARCHAR
1
SQLT_STR
LVARCHAR
2
SQLT_AFC
CHAR
2
SQLT_CHR
VARCHAR
2
SQLT_CHR
LVARCHAR
3
SQLT_AFC
CHAR
3
SQLT_CHR
VARCHAR
3
SQLT_CHR
LVARCHAR

其中指定为SQLT_AFC类型访问数据库时,在数据绑定时,其缓存可以不包含字符串结
束 符的位置。比如向char(10)字段插入一个10字节的字符串,其绑定的缓存大小可以申
请为只 有10字节大小。此时由于并不包含字符串结束符, 使用strlen获取长度是大于或
等于10的。
其他的字符串类型, 其缓存大小需加上结束符位置,而绑定时长度则是strlen()的长度。
两者差异在进行char(1)类型字段访问是最为明显。如果使用SQLT_AFC类型获取该字段
数 据,缓存大小可以设置为1。但是其他类型获取时, 会报截断错误。插入过程也是同
样, SQLT_AFC类型时, 可以在缓存为1字节情况下正常插入, 但是其他类型一般(有
可能会有 随机性)会报截断错误。
例:

Char ch = ‘i’;
rc=GCIBindByPos(stmt,&Bindp[0],errhp,1,(dvoid*)&ch,(sb4)1,SQLT_AFC,NULL,NULL,NUL
L,0,NULL,GCI_DEFAULT);

GBase 8s GCI 接口使用指南

南大通用数据技术股份有限公司 7
上例中,类型指定SQLT_AFC可正常插入,但如果是其他类型SQLT_CHR则可能报截断错
误,因此此时(&ch)字符串没有结束符。