返回首页

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

更新日期:2024年09月11日

GBA-02DD-0003
错误码
错误标识
错误信息
GBA-02DD-000
3
ER_GCLUSTER_HAS
H_COLUMN_TYPE
Type of distributed column '%s' is
incorrect.
错误出现原因
hash 分布列目前仅支持:int 型,varchar 型,decimal 型
分析与建议
检查hash 分布列的数据类型,
如果可以,
请更换hash 分布列或其类型为支持的
类型

位置:INFORMIXSQLHOSTS 环境变量指定
参数:对于每一个数据库实例,添加一行配置信息,格式为:
Server-name protocol IP-address Port-name
Server-name:数据服务的实例名
protocol:连接使用的协议,取值为onsoctcp
IP-address:服务器IP 地址
Port-name:/etc/services 中Server-name 对应的端口号

3 类型

GBase 8s支持的Interval类型数据两种,Year-Month 和Day-Second。

在C语言中, 都用GCIInterval表示,使用子类型区分。

/* hours; range is 0 <= hours <=23 */
/* minutes; range is 0 <= minutes <= 59 */
/* seconds; range is 0 <= seconds <= 59 */





/* gregorian year; range is -4712 <= year <= 9999 */
/* month; range is 1 <= month < 12 */
/* day; range is 1 <= day <= 31 */
/* time */
ub2 GCITimeHH;
ub2 GCITimeMI;
ub2 GCITimeSS;
};
typedef struct GCITime GCITime;
struct GCIDate
{
sb2 GCIDateYYYY;
ub2 GCIDateMM;
ub2 GCIDateDD;
GCITime GCIDateTime;
sb4 fraction;
};

GBase 8s GCI 接口使用指南

南大通用数据技术股份有限公司 12
C
(64
)


SQLT类型

GCIInterval
Year-Month
GCI_DTYPE_INTERVAL_
YM
Interval year to month
SQLT_INTERVAL
_YM
GCIInterval
Day-Second
GCI_DTYPE_INTERVAL_
DS
Interval day to second /
interval day to fraction(5)
SQLT_INTERVAL
_DS

GCI接口在使用Interval类型做数据库访问操作时, 有如下规则:
GCIInterval Year-Month,包含年(范围 0~9999) ,月(范围 0~11)。
GCIInterval Day-Second,包含日期(范围 0~999999999) ,小时(范围 0~23),
分钟(范围0~59) ,秒(范围 0~59), 纳秒(范围 0~999999) 。
关于纳秒, GBase8s 中 interval 的 fraction 类型的位数范围是 1~5,最大只保
留 5 位有效数字,所以纳秒的低 1 位会被舍弃。例如, 对于 interval day to
fraction(5) 的数据,输入值为 9,存入数据库的值为 0。
关于 Interval 类型的内部转换。
在GCI中使用的Interval类型,不包含GBase 8s支持的Interval的其他类型,例如interval-
hour to second ,interval minute to fraction(4)等等。
如果数据库中的interval类型,与GCI使用的类型不一致,会导致数据丢失。为解决这一问
题, 在GCI内部进行了数据转换,规则如下:
1. 取得数据库中interval的类型信息,当Interval类型不一致时,进行转化。
2. 取得数据库中interval的largest qualifier。
3. 将GCI传入的数值,转换成largest qualifier的对应类型。
4. 将转换后的值, 传递到数据
库。 举例说明:
GCI输入值类型为 Interval day to fraction(3) ,值为‘1 2:3:4.005’。

数据库中类型为Interval hour to second。
由于interval类型不同, 需要转换。
数据库中interval类型的largest qualifier是hour ,所以需要将interval day to fraction(3)转
换为 interval hour to second。
1 day等于24 hours,所以转换后为‘26:3:4.005’。由于数据库中的interval类型不包含fraction
部分,所以‘005’会被舍弃,最终传递给数据库的值是‘26:3:4’。