GBase 8s ESQL/C 支持使用 decimal 数据类型的 SQL DECIMAL 和 MONEY 数据
类型。decimal 数据类型是一种独立于机器的方法,代表最多 32 位有效数字,有效值范围
为 10-129 - 10+125。
DECIMAL 数据类型可以使用以下两种格式:
DECIMAL(p) 浮点
当使用 DECIMAL(p) 数据类型定义列时,它总共有 p (< = 32) 个有效位。
DECIMAL(p) 的绝对值范围为 10-130 - 10124。
DECIMAL(p,s) 定点
当使用 DECIMAL(p,s) 数据类型定义列时,它总共有 p (< = 32) 个有效数字(精度)
以及 s (< = p) 位小数部分的总位数(小数位)。
decimal 结构
使用 decimal 数据类型为 DECIMA 类型的数据库值声明主机变量。
GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 110 -
decimal 类型的结构表示 decimal 主机变量中的一个值,如下所示:
#define DECSIZE 16
struct decimal
{
short dec_exp;
short dec_pos;
short dec_ndgts;
char dec_dgts[DECSIZE];
};
typedef struct decimal dec_t;
decimal.h 头文件包含 decimal 结构和 typedefdec_t。将此文件包含在使用任何
decimal 主机变量的所有 C 源文件中,其中包含以下 include 指令:
EXEC SQL include decimal;
decimal 结构以数字对的形式存储。每对都是一个范围在 00 到 99 之间的数字(因
此,可以将一对看作一个 100 位的数字)。下表显示了 decimal 结构的四个部分。
表 4. decimal 结构中的字段
字段
描述
dec_exp
规范化decimal 类型数字的指数。
该数字的标准化形式在最左边数字的
左侧有小数点。该指数表示从左侧计数到位置小数点的数字对的位置(或对
于 100 个数字的数字,为 100 的幂数)。
dec_pos
decimal 类型数字的符号。dec_pos 字段可以假定以下三个值之一:1:
当数字大于等于零
0;当数字小于零
–1:当值为空
dec_ndgts
decimal 类型数中数字对对数(基数为 100 的有效数字的数)。该值
也是 dec_dgts 数组中实体数。
dec_dgts[]
字符数组,保存标准化 decimal 类型数字的有效数字,假定
dec_dgts[0] ! = 0。
数字中的每个字节包含 decimal 类型数字中的下一个有效的基数的
GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 111 -
字段
描述
100 位,从 dec_dgts[0] 到 dec_dgts[dec_ndgts]。
下表显示了一些样本 decimal 值。
表 5. decimal 字段值的结构示例
值
dec_exp
dec_pos
dec_ndgts
dec_dgts[]
-12345.6789
3
0
5
dec_dgts[0] = 01
dec_dgts[1] = 23
dec_dgts[2] = 45
dec_dgts[3] = 67
dec_dgts[4] = 89