返回首页

gbase数据、南大通用产品文档:GBase8s动态管理结构

更新日期:2024年09月11日

如果您不知道发送至数据库服务器,或从数据库服务器接收的值的数目或数据类型,
则请使用动态管理结构。动态管理结构允许您将数据的变长列表传至数据库服务器,或从
它接收变长列表。

要执行带有位置的列的动态 SQL 语句,
您可在您的 GBase 8s ESQL/C 程序中使用下
列动态管理结构之一:
系统描述符区域是符合 X/Open 标准的与语言无关的数据结构。请您以 SQL 语句
ALLOCATE DESCRIPTOR、GET DESCRIPTOR、SET DESCRIPTOR 和 DEALLOCATE
DESCRIPTOR 来分配和操纵它。
sqlda 结构是您以相同类型的 C 语言语句操作的 C 语言数据结构,您使用其来分配
和操纵其他 C 结构(有 struct 数据类型的区域)。
由于此方法在 SQL 语句内使用 C 语言结构,因此它依赖于语言,且不符合 X/Open
标准。

对于给定的动态 SQL 语句,动态管理结构可保存任何下列信息:
该语句中未知列的数目
对于每一未知的值,数据类型和长度,数据的空间,以及关于任何相关联的变量的信
息(它的数据类型、长度和数据)

然后,GBase 8s ESQL/C 程序可使用此信息来确定要保存该值的主变量适合的长度和

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 465 -

类型。
系统描述符区域
系统描述符区域是由 GBase 8s ESQL/C 声明来保存从准备好的语句返回的数据或由
准备好的数据发送的数据的内存区域。它是符合 X/Open 标准的动态管理结构。

系统描述符区域有两个部分:
有 COUNT 字段构成的固定大小的部分。
此字段包含在系统描述符区域中描述的列的
数目。
对于系统描述符区域中每一值,包含项描述符的变长部分。每一项描述符是一个固定
大小的结构。

对于两个值,下图展示系统描述符区域的样子。

图 1. 展示两个值的系统描述符区域的简图

定长部分
系统描述符区域的固定大小部分有单个字段构成,如下表所示。


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 466 -

表 8. 系统描述符区域的固定大小部分中的字段
字段
数据类型
描述
COUNT
short
系统描述符区域中列值的数目或发生率。
这是项
描述符的数目,
每一列一个。
DESCRIBE...USING SQL
DESCRIPTOR 语句将 COUNT 设置为被描述的列
的数目。在您将列值发送至数据库服务器之前,您必
须使用 SET DESCRIPTOR 来初始化该字段。

项描述符
系统描述符区域中的每一项描述符保存关于可传送至数据库服务器或从数据库服务
器收到的数据值的信息。

每一项描述符由下表总结的字段组成。

表 9. 系统描述符区域的每一项描述符中的字段
字段
数据类型
描述
DATA
char
*
指向发送至数据库服务器或从数据库服务器
接收的列数据的指针。
TYPE
short
表示正在转换的列的数据类型的整数。在
sqltypes.h 和 sqlxtype.h 头文件中定义
这些值。
LENGTH
short
以字节计的 CHAR 类型数据的长度,
DATETIME 或 INTERVAL 数据的编码的限定
符,或 DECIMAL 或 MONEY 值的大小。
NAME
char
*
指向包含列名称或正在转换的显示标签的字
符数组的指针。
INDICATOR
short
可包含两个值之一的指示符变量:
0
需要 DATA 字段来包含非空数据。
-1
当未指定 DATE 字段值时,插入 NULL。
SCALE
short
包含在 DATA 字段中的列的范围;仅对于
DECIMAL 或 MONEY 数据类型定义。
PRECISION
short
包含在 DATA 字段中的列的精度;仅为
DECIMAL 或 MONEY 数据类型定义。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 467 -

字段
数据类型
描述
NULLABLE
short
指定该列可否(在 DESCRIBE 语句之后)包
含空值:
1
该列允许空值
0
该列不允许空值。

在执行 EXECUTE 语句或动态 OPEN 语句
之前,必须将它设置为 1 来指示在 INDICATOR
字段中指定指示符值,而如果未指定它,则设置为
0。(当您执行动态 FETCH 语句时,忽略
NULLABLE 字段。
IDATA
char
*
用户定义的指示符数据,或包含 DATA 字段
的指示符语句的主变量名称。IDATA 字段不是标
准 X/Open 字段。
ITYPE
short
用户定义的指示符变量的数据类型。在
sqltypes.h 和 sqlxtype.h 头文件中定义
这些值。
ITYPE 字段不是标准 X/Open 字段。

ILENGTH
short
以字节计的用户定义的指示符的长度。
ILENGTH 字段不是标准 X/Open 字段。
EXTYPEID
int4
用户定义的
(opaque 或 distinct)
或复合的
(集
合或 row)数据类型的扩展的标识符。
EXTYPENAME
char
*
用户定义的
(opaque 或 distinct)
或复合的
(集
合或 row)数据类型的名称。
EXTYPELENGTH
short
以字节计的 EXTYPENAME 字段中的字符串
的长度。
EXTYPEOWNERNAME
char
*
用户定义的
(opaque 或 distinct)
或复合的
(集
合或 row)数据类型的所有者的名称(对于 ANSI
数据库)。
EXTYPEOWNERLENGT
H
short
以字节计算的 EXTYPEOWNERNAME 字段
中的字符串的长度。
SOURCETYPE
short
对于 distinct 类型列,
源数据类型的数据类型
常量(来自 sqltypes.h)。
SOURCEID
int4
对于 distinct 类型列,
源数据类型的扩展的标

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 468 -

字段
数据类型
描述
识符。

sqlda 结构
sqlda 结构是保存从准备好的语句返回的数据的 C 结构
(在 sqlda.h 头文件中定义)



每一 sqlda 结构有三部分:
由 sqld 字段构成的定长部分,其包含在 sqlda 结构中描述的列的数目。
对于为每一列值,
包含 sqlvar_struct 结构的变长部分。
每一 sqlvar_struct 结构是定长
的结构。
包括关于 sqlda 结构自身的描述性信息。

对于两个值,下图展示 sqlda 结构看上去的样子。

图 2. 展示两个值的 sqlda 结构的简图


图 1展示单个数据缓冲区中 sqldata 字段中的列数据。
可在分开的缓冲区中存
储此数据。
定长部分

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 469 -

下表描述 sqlda 结构的定长部分,其由单个字段构成。

表 10. sqlda 结构的定长部分中的字段
字段
数据类型
描述
sqld
short
sqlda 中列值的数目或发生率。
这是 sqlvar_struct 结构的数
目,每一列一个。DESCRIBE...INTO 语句将 sqld 设置为被描述
的列的数目。在您将列值发送至数据库服务器之前,您必须设置
sqld 来初始化该字段。
sqlvar_struct 结构
当完全地定义它的所有组件时,对于该集中的每一变量,sqlda 结构指向
包含必要信息的 sqlvar_struct 结构的序列的初始地址。
每一 sqlvar_struct
结构保存可发送至数据库服务器或从数据库服务器接收的数据值。您的程序通
过 sqlda 的 sqlvar 字段访问这些 sqlvar_struct 结构。表 1和 表 2总结
sqlda 的变长结构。

表 11. 访问 sqlda 结构的变长部分的字段
字段
数据类型
描述
sqlv
ar
struct
sqlvar_struct *
指向 sqlda 结构的变长部分的指针。从数据库服务器返回的
或发送至数据库服务器的每一列值有一个 sqlvar_struct。sqlvar
字段指向第一个 sqlvar_struct 结构。

下表展示 sqlvar_struct 结构中的字段。

表 12. sqlvar_struct 结构中的字段
字段
数据类型
描述
sqltype
short
标识数据库服务器发送或接收的列的数据类型的整
数。
在 sqltypes.h 和 sqlxtype.h 头文件中定义这
些值。
sqllen
short
以字节计的 CHAR 类型数据的产度,或 DATETIME
或 INTERVAL 值的编码的限定符。该长度的含义依赖于信
息的类型,以及如何使用该 sqlda:
当您以 DESCRIBE 语句检索 sqlda 结构时,
自动地将
sqllen 字段中的值设置为该数据在磁盘上占据的空间的长
度。该值来自系统目录。
当您将数据访存至缓冲区内,或通过缓冲区发送数据
时,您必须将 sqllen 字段中的值设置为用于该列的内存缓
冲区的大小。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 470 -

字段
数据类型
描述
sqldata
char *
指向数据库服务器发送或接收的列数据的指针。
sqlind
short *
对于可包含两个值之一的列,指向指示符变量指针:
0
sqldata 字段包含非空数据。
-1
sqldata 字段包含空数据。
sqlname
char *
指向包含列名称数据库服务器发送或接收的显示标签
的字符数组的指针。
sqlformat
char *
为将来的使用保留。
sqlitype
short
指定用户定义的指示符变量的数据类型的整数。在
sqltypes.h 和 sqlxtype.h 头文件中定义这些值。
sqlilen
int4
以字节计的用户定义的指示符变量的长度。
sqlidata
char *
指向用户定义的指示符变量的数据的指针。
sqlxid
int4
用户定义的(opaque 或 distinct)或复合的(集合或
row)数据类型的扩展的标识符。
sqltypename
char *
用户定义的(opaque 或 distinct)或复合的(集合或
row)数据类型的名称。
sqltypelen
short
以字节计的 sqltypename 字段中的字符串的长度。
sqlownername
char *
用户定义的(opaque 或 distinct)或复合的(集合或
row)数据类型的所有者的名称(对于 ANSI 数据库)。
sqlownerlen
short
以字节计的 sqlownername 字段中的字符串的长度。
sqlsourcetype
short
对于 distinct 类型列,
源数据类型的数据类型常量
(来
自 sqltypes.h)。
sqlsourceid
int4
对于 distinct 列,源数据类型的扩展的标识符。
sqlflags
int4
通常内部使用此字段。然而,如果由 DESCRIBE 语句
已初始化了该 sqlda 结构,
则您可通过使用在 sqltypes.h 中
定义的 ISCOLUMNULLABLE() 宏来确定该列是否接受
空。如果它返回 1,则该列接受空。
在 sqltypes.h 中定义 ISCOLUMNULLABLE() 宏。

描述性信息
下表总结描述 sqlda 结构自身的 sqlda 字段。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 471 -


表 13. 在 sqlda 结构中的描述性字段
字段
数据类型
描述
desc_nam
e
char[19]
描述符的名称;最大 18 字符
desc_occ
short
sqlda 结构的大小
desc_next
struct sqlda
*
指向下一 sqlda 结构的指针

在数据库服务器初始化磁盘空间时,它将逻辑日志文件和物理日志放在根数据库空间中。
您对该操作没有控制权。要提高性能(尤其是减少对根数据库空间的写入次数以及将争用
最小化),可将逻辑日志文件从根数据库空间移出至磁盘上未被活动表或物理日志共享的
数据库空间中。请参阅将逻辑日志文件移至另一个数据库空间。
要进一步提高性能,可将逻辑日志文件分成两组,并将这两组存储在两个不同的磁盘(两
个磁盘均不包含数据)上。例如,如果您有 6 个逻辑日志文件,那么您可能会将文件 1、
3 和 5 放在磁盘 1 上,将文件 2、4 和 6 放在磁盘 2 上。这种安排可提高性能,因为
从不需要同一磁盘驱动器同时处理写入当前逻辑日志文件和备份到磁带。
逻辑日志文件包含关键信息,因此必须制作镜像以获取最大数据保护。如果将逻辑日志文
件移至其他数据库空间,请计划对该数据库空间启动镜像过程。

 摘要:



GBase 8a 程序员手册C API 篇
南大通用数据技术股份有限公司

- 33 -
检查与服务器的连接是否工作。如果连接丢失,将自动尝试再连接。
该函数可被闲置了较长时间的客户端使用,用以检查服务器是否已关闭了
连接,并在必要时再次连接。
 语法:
int
gbase_ping(GBASE *gbase);
 参数:
 返回值:
如果与服务器的连接有效返回0。如果出现错误,返回非0 值。返回的非0
值不表示GBase 服务器本身是否已关闭,连接可能因其他原因终端,如网络问
题等。