返回首页

gbase数据、南大通用产品文档:GBase8a意见反馈

更新日期:2024年09月11日

南大通用公司非常欢迎和珍惜您的意见和建议,
请通过下列方式反馈您对本手册的
意见和建议。

电话反馈:
电话:400-013-9696

网络反馈:
官网:http://www.gbase.cn
GBase 8a 技术社区:http://www.gbase8a.com

GBase 8a MPP Cluster 产品手册
2 产品概述
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
12
2 产品概述
本章对GBase 8a MPP Cluster 产品进行详细描述,包括产品简介、产品架构、部署
方案、企业级增强特性、技术指标等信息。

GetConnect() 函数仅在 Windows(TM) 环境中可用,并建立与数据库服务器的新
的显式的连接。
重要: 为了与 Windows(TM) 应用程序的版本 5.01 GBase 8s ESQL/C 相兼容,GBase
8s ESQL/C 支持 GetConnect() 连接库函数。
对于 Windows(TM) 环境,
当您编写新的 GBase
8s ESQL/C 应用程序时,请使用 SQL CONNECT 语句来建立显式的连接。
语法
void *GetConnect ( )
用法
GetConnect() 函数自我调用,等同于下列 SQL 语句:
EXEC SQL connect to '@dbservername' with concurrent transaction;

在此示例中,dbservername 是定义了的数据库服务器的名称。必须在至少下列位置之
一中定义客户机应用程序指定的所有数据库服务器:
Registry 中的 GBASEDBTSERVER 环境变量包含缺省的数据库服务器的名称。
Setnet32 实用程序设置该 Registry 值。
InetLogin 结构中的 InfxServer 字段包含缺省的数据库服务器或指定的数据库服务
器的名称。客户机应用程序设置这些 InetLogin 字段。

例如,下列代码片段使用 GetConnect() 来建立与 mainsrvr 数据库服务器上
stores7 数据库的显式的连接:
void *cnctHndl;


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 697 -
strcpy(InetLogin.InfxServer, "mainsrvr");


cnctHndl = GetConnect();
EXEC SQL database stores7;

在前一示例中,如果您已省略了对 InetLogin.InfxServer 字段赋值,则 GBase 8s
ESQL/C 会建立与缺省的数据库服务器(Registry 中 GBASEDBTSERVER 环境变量指示
的数据库服务器)中 stores7 数据库的显示的连接。

在任何对 GetConnect() 的调用之后,请使用 SQL DATABASE 语句(或打开数据库
的某其他 SQL 语句)来打开想要的数据库。在前面的代码片段中,GetConnect() 函数与
DATABASE 语句的组合等同于下列 CONNECT 语句:
EXEC SQL connect to 'stores7@mainsrvr' with concurrent transaction;

重要:
由于 GetConnect() 函数映射到 CONNECT 语句,
因此,
它设置 SQLCODE 和
SQLSTATE 状态代码来指示该连接请求是成功还是失败。在 Windows(TM) 的版本 5.01
GBase 8s ESQL/C 中,GetConnect() 与此行为不同,其中,此函数不设置 SQLCODE 和
SQLSTATE 值。
下表展示使用 GetConnect() 函数与使用 SQL CONNECT 语句之间的差异。

情况
GetConnect() 库函数
SQL CONNECT 语句
连接名称
在内部生成,并保存在该连接的
连接句柄结构中
在内部生成,
除非 CONNECT 包
括 AS 子句;因此,要切换至其他连
接,
当您创建该连接时,
请指定 AS 子
句。
打开数据库
仅建立到数据库服务器的显式的
连接;因此,应用程序必须使用
DATABASE 语句(或某其他有效的
SQL 语句)来打开数据库。
可创建到数据库服务器的显式的
连接,并当同时提供数据库服务器与数
据库的名称时,打开数据库

重要: 由于 GetConnect() 函数映射到带有 WITH CONCURRENT TRANSACTION
子句的 CONNECT 语句,
因此,
它允许带有打开的事务的显式的连接成为休眠的。
在您的
GBase 8s ESQL/C 应用程序调用 SetConnect() 函数来切换至另一显式的连接之前,它不需
要确保提交了或回滚了当前的事务。


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 698 -
对于您以 GetConnect() 建立的每一连接,请调用 ReleaseConnect() 来关闭该连接,
并释放资源。

返回代码
CnctHndl
调用 GetConnect() 成功,且函数已为新的连接返回了连接句柄。
空指针
调用 GetConnect() 不成功。

DECIMAL[(M[, D])]代表一个精确值,它所存储的数值范围是-(1E+M -1)/(1E+D)

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
631
到(1E+M -1)/(1E+D)。
在DECIMAL[(MS[, D])]数据类型中,M 是总位数,支持的最大长度为65;D 是
小数点后面的位数,支持的最大长度为30。
在不需要过高的数字精度的场景中,
DECIMAL 中的M 可以定义为M≤18,
这样
可以获得更好的计算性能。
DECIMAL 用来存储那些严格要求数字精度的数据,例如货币数据,在这种情况
下需要指定精度:
salary DECIMAL(5,2)
在DECIMAL(5,2)中,5 表示总位数(整数位和小数位的位数总和),2 是小数位
数。可以存储在salary 列的最小值是-999.99,最大值是999.99。
DECIMAL 类型值的最大范围受限于给定的精度和小数范围。超过小数范围时,
会按四舍五入的原则截断为设定小数位数。
在定义DECIMAL 类型数据列时,如果M 和D 同时省略,则M 取值为10,D 取
值为0,即DECIMAL(10,0),如果只指定M 值,省略D 值,那么插入一个非整
数值的数字时,将按照四舍五入的原则截取到整数位。
注意
Decimal 与时间进行比较,只支持decimal 的常量与datetime 比较,不支持
decimal 列与datetime 比较。
如:表中g 列为decimal 类型,f 列为datetime 类型,则
支持
select * from t1 where g=cast('20220212112059.010000' as date);
不支持
Select * from t1 where g=f;
示例
示例1:定义的列数据类型为DECIMAL(18,5)。
CREATE TABLE products(productnum DECIMAL(18,5));
INSERT INTO products(productnum) VALUES(19000.44365);
gbase> DESC products;
+------------+---------------+------+-----+---------+-------+

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
632
| Field
| Type
| Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| productnum | decimal(18,5) | YES
|
| NULL
|
|
+------------+---------------+------+-----+---------+-------+
1 row in set
gbase> SELECT productnum FROM products;
+-------------+
| productnum
|
+-------------+
| 19000.44365 |
+-------------+
1 row in set
示例2:定义的列数据类型为DECIMAL,M 和D 均省略,那么M 默认值为10,
D 默认值为0。
gbase> CREATE TABLE products(productnum DECIMAL);
Query OK, 0 rows affected
gbase> DESC products;
+------------+---------------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| productnum | decimal(10,0) | YES
|
| NULL
|
|
+------------+---------------+------+-----+---------+-------+
1 row in set
示例3:定义列数据类型为DECIMAL(M,D),插入的数据超出总位数M 时,
报告错误信息;超出精度D 时,则小数部分四舍五入。
gbase> CREATE TABLE products(productnum DECIMAL(8,3));
Query OK, 0 rows affected
gbase> INSERT INTO products(productnum) VALUES(191220.443);
ERROR 1264 (22003): Out of range value for column 'productnum' at row 1
gbase> INSERT INTO products(productnum) VALUES(19122.4436);
Query OK, 1 row affected, 1 warning
gbase> SELECT productnum FROM products;
+------------+
| productnum |
+------------+
|