返回首页

gbase数据、南大通用产品文档:GBase8s为主机变量选择数据类型

更新日期:2024年09月11日

当您访问 GBase 8s ESQL/C 程序中的数据库列时,必须声明适当的 C 或 GBase 8s
ESQL/C 数据类型的主机变量以保存该数据。表 1 列出了 GBase 8s 的 SQL 数据类型以
及您可以为主机变量声明的对应的 GBase 8s ESQL/C 数据类型。表 2 列出了 GBase 8s
可用的其它 SQL 数据类型和 GBase 8s ESQL/C 数据类型,可用作这些类型的列的主机变
量。这两个表都包括对本书中的章节或章节的引用,您可以在其中获取有关主机变量数据
类型之间的更多信息。
表 1. 对应 SQL 的主机变量数据类型
SQL 数据类型
ESQL/C 预定
义的数据类型
C 语言
类型
请参阅
BIGINT
BIGINT
8 字节
整数
Numeric 数据类型
BIGSERIAL
BIGINT
8 字节
整数
Numeric 数据类型
BOOLEAN
boolean

表 2
BYTE
ifx_loc_t or
loc_t

简单大对象
CHAR(n)
CHARACTER(
n)
fixchar [n] or
string [n+1]
char [n
+ 1] 或
char *
字符和字符串数据类型
DATE
date
4 字节
整数
时间数据类型
DATETIME
datetime or
dtime_t

时间数据类型
DECIMAL
DEC
NUMERIC
MONEY
decimal or
dec_t

Numeric 数据类型
FLOAT
DOUBLE

double
时间数据类型

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

PRECISION
INT8
int8 or
ifx_int8_t

Numeric 数据类型
INTEGER
INT

4 字节
整数
Numeric 数据类型
INTERVAL
interval or
intrvl_t

时间数据类型
LVARCHAR
lvarchar
char [n
+ 1] 或
char *
字符和字符串数据类型
NCHAR(n)
fixchar [n] or
string [n+1]
char [n
+ 1]或 char
*
字符和字符串数据类型
NVARCHAR(m
)
varchar[m+1]
or string [m+1]
char
[m+1]
字符和字符串数据类型
SERIAL

4 字节
整数
Numeric 数据类型
SERIAL8
int8 or
ifx_int8_t

Numeric 数据类型
SMALLFLOAT
REAL

float
Numeric 数据类型
SMALLINT

2 字节
整数
Numeric 数据类型
TEXT
loc_t

简单大对象
VARCHAR(m,x
)
varchar[m+1]
or string [m+1]
char
d[m+1]
字符和字符串数据类型



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

表 2. 对应于 GBase 8s 特定的 SQL 和主机变量数据类型
SQL 数据类型
ESQL/C 预定义
类型
请参阅
BLOB
ifx_lo_t
智能大对象
CLOB
ifx_lo_t
智能大对象
LIST(e)
collection
智能大对象
MULTISET(e)
collection
复杂数据类型
Opaque data type
lvarchar,
fixed binary, or var
binary
不透明数据类型
ROW(...)
row
复杂数据类型
SET(e)
collection
复杂数据类型
数据类型常量
GBase 8s ESQL/C sqltypes.h 头文件常量包含 SQL 和 GBase 8s ESQL/C 数据类型。
一些 GBase 8s ESQL/C 库函数要求数据类型常量作为参数。还可以在动态 SQL 程序中比
较这些数据类型常量,以确定描述 DESCRIBE 语句的列的类型。下图中的 GBase 8s
ESQL/C 代码摘录将 sqlvar 的 sqltype 元素与一系列 SQL 数据类型常量进行比较,以
确定 DESCRIBE 语句返回的列的类型。
图: 带有 SQL 数据类型常量的代码摘录
for (col = udesc->sqlvar, i = 0; i < udesc->sqld; col++, i++)
{
switch(col->sqltype)
{
case SQLSMFLOAT:
col->sqltype = CFLOATTYPE;
break;

case SQLFLOAT:
col->sqltype = CDOUBLETYPE;
break;

case SQLMONEY:
case SQLDECIMAL:
col->sqltype = CDECIMALTYPE;

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

break;

case SQLCHAR:
col->sqltype = CCHARTYPE;
break;

default:
/* The program does not handle INTEGER,
* SMALL INTEGER, DATE, SERIAL or other
* data types. Do nothing if we see
* an unsupported type.
*/
return;
}
SQL 数据类型常量
表 1 显示了 GBase 8s 的 SQL 数据类型常量。表 2 显示了其它可用于 GBase 8s
的数据类型的 SQL 数据类型常量。
表 1. GBase 8s SQL 类数据类型的常量
SQL 数据类型
定义的常量
整数值
CHAR
SQLCHAR
0
SMALLINT
SQLSMINT
1
INTEGER
SQLINT
2
FLOAT
SQLFLOAT
3
SMALLFLOAT
SQLSMFLOAT
4
DECIMAL
SQLDECIMAL
5
SERIAL
SQLSERIAL
6
DATE
SQLDATE
7
MONEY
SQLMONEY
8
DATETIME
SQLDTIME
10
BYTE
SQLBYTES
11
TEXT
SQLTEXT
12

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

VARCHAR
SQLVCHAR
13
INTERVAL
SQLINTERVAL
14
NCHAR
SQLNCHAR
15
NVARCHAR
SQLNVCHAR
16
INT8
SQLINT8
17
BIGSERIAL
SQLBIGSERIAL
53
LVARCHAR
SQLLVARCHAR
43
BOOLEAN
SQLBOOL
45
BIGINT
SQLINFXBIGIN
T
52
BIGSERIAL
SQLBIGSERIAL
53

表 2. 特定于 GBase 8s 的 GBase 8s SQL 列数据类型的常量
SQL 数据类型
定义的常量
整数值
SET
SQLSET
19
MULTISET
SQLMULTISET
20
LIST
SQLLIST
21
ROW
SQLROW
22
可变长度的不透明类型
SQLUDTVAR
40
固定长度的不透明类型
SQLUDTFIXED
41
SENDRECV(仅限于客户
端)
SQLSENDRECV
44
重要: SENDRECV 数据类型具有 SQL 常量但是只能在 GBase 8s ESQL/C 程序中
使用。不能将数据库列定义为类型 SENDRECV。
ESQL/C 数据类型常量
在 GBase 8s ESQL/C 中给主机变量指定 GBase 8s ESQL/C 数据类型。下表显示了这

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

些常量。
表 1. ESQL/C 主机变量数据类型的常量
ESQL/C 数据类型
常量
整数值
char
CCHARTYPE
100
short int
CSHORTTYPE
101
int4
CINTTYPE
102
long
CLONGTYPE
103
float
CFLOATTYPE
104
double
CDOUBLETYPE
105
dec_t 或 decimal
CDECIMALTYPE
107
fixchar
CFIXCHARTYPE
108
string
CSTRINGTYPE
109
date
CDATETYPE
110
dec_t 或 decimal
CMONEYTYPE
111
datetime 或 dtime_t
CDTIMETYPE
112
ifx_loc_t 或 loc_t
CLOCATORTYPE
113
varchar
CVCHARTYPE
114
intrvl_t 或 interval
CINVTYPE
115
char
CFILETYPE
116
int8
CINT8tYPE
117
collection
CCOLTYPE
118
lvarchar
CLVCHARTYPE
119

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

fixed binary
CFIXBINTYPE
120
var binary
CVARBINTYPE
121
boolean
CBOOLTYPE
122
row
CROWTYPE
123
可以使用这些 GBase 8s ESQL/C 数据类型作为 GBase 8s ESQL/C 库中某些函数的
参数的数据类型。例如:rtypalign() 和 rtypmsize() 函数都要求数据类型值作为参数。
X/Open 数据类型常量
如果您的程序符合 X/Open 标准
(使用 -xopen 选项编译)

那么必须使用下表显示
的数据类型值。GBase 8s 为 sqlxtype.h 头文件中的这些值定义常量。
表 1. X/Open 环境中 GBase 8s SQL 列数据类型的常量
SQL 数据类型
定义的常量
X/Open 整数值
CHAR
XSQLCHAR
1
DECIMAL
XSQLDECIMAL
3
INTEGER
XSQLINT
4
SMALLINT
XSQLSMINT
5
FLOAT
XSQLFLOAT
6
头文件的数据类型
要使用 SQL 数据类型,您的程序必须包括适当的 GBase 8s ESQL/C 头文件。表 1
显示了使用数据库服务器主机变量和 GBase 8s ESQL/C 头文件之间的关系。
表 2显示了主
机变量数据类型和特定于 GBase 8s Universal Data Option 的 GBase 8s ESQL/C 头文件之
间的关系。
表 1. SQL 数据类型和 ESQL/C 头文件
SQL 数据类型
ESQL/C 或 C 数据类型
ESQL/C 头文件
BLOB
ifx_lo_t
locator.h
BOOLEAN
boolean
自动定义
BYTE
ifx_loc_t 或 loc_t
locator.h

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

CHAR(n)
CHARACTER(n)
fixchar array[n] 或
string array[n+1]
自动定义
DATE
date
自动定义
DATETIME
datetime 或 dtime_t
datetime.h
DECIMAL
DEC
NUMERIC
MONEY
decimal 或 dec_t
decimal.h
FLOAT
DOUBLE PRECISION
double
自动定义
INT8
int8
int8.h
INTEGER
INT
4 字节整数
自动定义
INTERVAL
interval or intrvl_t
datetime.h
LVARCHAR
lvarchar array[n + 1]
( n 是可能存储在
LVARCHAR 自动中的长字符
串的长度)
自动定义
MULTISET(e)
collection
自动定义
NCHAR(n)
fixchar array[n] or
string array[n+1]
自动定义
NVARCHAR(m)
varchar[m+1] or string
array[m+1]
自动定义
SERIAL
4 字节整数
自动定义
SERIAL8
int8
int8.h
BIGINT
BIGINT
自动定义

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

BIGSERIAL
BIGINT
自动定义
SMALLFLOAT
REAL
float
自动定义
SMALLINT
short int
自动定义
TEXT
loc_t
locator.h
VARCHAR(m,x)
varchar[m+1] 或 string
array[m+1]
自动定义

表 2. 特定于 GBase 8s 的 SQL 数据类型和 ESQL/C 头文件
SQL 数据类型
ESQL/C 或 C 数据类型
ESQL/C 头文件
BLOB
ifx_lo_t
locator.h
CLOB
ifx_lo_t
locator.h
LIST(e)
collection
自动定义
Opaque 数据类型
lvarchar 或 fixed
binary 或 var binary
包含内部结构或不透明类
型定义的常量的用户定义的头
文件
ROW(...)
row
自动定义
SET(e)
collection
自动定义

Cannot take null input
您提供的字符串为空。在这种情况中,GBase 8s JDBC Driver 无法理解空输入。
请检查输入字符串,确保它具有适当的值。

Row extended ID provided (%s) does not match row type information (%s)
行中对象扩展 ID 与行类型信息中定义的扩展 ID 不匹配。
可以更改行类型信息(如果您提供了行定义)或检查类型映射信息。