返回首页

gbase数据、南大通用产品文档:GBase8s两阶段落实协议错误

更新日期:2024年09月11日

以下两阶段落实协议错误需要管理员特别加以注意。
错误号 描述
-698

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 501 -
如果您接收到错误 -698,那么说明已发生启发式回滚,并已导致未一致实现
的事务。启发式回滚的结果中描述了导致该事件的环境。有关不一致事务如何
发展的说明并了解您可用的选项,请参阅这些信息。
-699
如果您接收到错误 -699,那么说明已发生启发式回滚。启发式回滚的结果中
描述了导致该事件的环境。有关不一致事务如何发展的说明,请参阅这些信
息。
-716
如果您接收到错误 -716,那么说明协调线程已在其发出最后决定后被管理员
终止。在导致错误条件的独立操作中描述了该应用场合。

函数说明
如果expr 为NULL,ISNULL()的返回值为1,否则返回值为0。
示例

示例1:expr 的值不为NULL。
gbase> SELECT ISNULL(1+1) FROM t;
+-------------+
| ISNULL(1+1) |
+-------------+
| 0 |
+-------------+
1 row in set

示例2:1/0 的结果为NULL,ISNULL()的返回值为1。
gbase> SELECT ISNULL(1/0) FROM t;
+-------------+
| ISNULL(1/0) |
+-------------+
| 1 |
+-------------+
1 row in set

示例3:对NULL 值使用“=”进行比较,ISNULL 结果为1。
gbase> SELECT ISNULL(NULL=NULL) FROM t;
+-------------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 376
| ISNULL(NULL=NULL) |
+-------------------+
| 1 |
+-------------------+
1 row in set
ISNULL()函数同IS NULL 比较操作符具有一些相同的特性。IS NULL 的使用
请参考“5.4.6.1.3.8 is boolean_value ,is not boolean_value”中的示例3。

功能说明
树结构的数据存放在表中,数据之间的层次关系即父子关系,通过表中的列与列
之间的关系来描述。通过每个节点的父节点,就可以确定整个树的结构。在

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1079
SELECT 命令中使用START WITH...CONNECT BY 可以查询表中的树形结构关
系。
分层查询通过CONNECT BY 进行递归,
若探测到cycle,
GBase 8a MPP Cluster
默认会报错退出;
若用户指定NOCYCLE,
GBase 8a MPP Cluster 会返回发生cycle
之前的已查询记录。
语法格式
START WITH...CONNECT BY 语法形式:
SELECT column_list|[LEVEL]
FROM [[vc_name.]database_name.]single_table
[WHERE …]
[hierarchical_clause]
[GROUP BY …]
[ORDER [SIBLINGS] BY …]
hierarchical_clause :
[START WITH ] CONNECT BY
| CONNECT BY [START WITH ]
[ORDER SIBLINGS BY {col_name | expr | position} [ASC | DESC] , ...]
connect_condition:
PRIOR expr1 op expr2
| expr1 op PRIOR expr2
| expr op connect_condition
| expr
表5- 102 参数说明
参数名称


LEVEL
伪列,由GBase 8a MPP Cluster 自动维
护;用于标识分层查询结果所在层级,
从1 开始。
START WITH

START WITH 后面的condition 标识分
层查询的所有root rows,
START WITH
子句可以省略。
CONNECT BY

CONNECT BY 后面的condition 标识
parent row 和child row 之间的连接
condition;condition 中的表达式中需要
通过PRIOR 指定该表达式涉及的列出
自parent row 还是child row。如:
... PRIOR expr_left = expr_right
//左表
达式中涉及的列出自parent row;
... expr_left = PRIOR expr_right
//右表
达式中涉及的列出自parent row;

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1080
参数名称


PRIOR
一元操作符,仅用于CONNECT BY 后
面的condition,
用于标识紧接在后面的
表达式中涉及的列出自parent row。
PRIOR 只对于紧接在后面的表达式生
效,如下例:
expr_1 = expr_2 AND expr_3 = PRIOR
expr_4
//PRIOR 只对于expr_4 生效。
PRIOR 不能嵌套使用,如下例会报错:
PRIOR (expr_1 + PRIOR expr2)
CONNECT_BY_ROOT
一元操作符,
用于获取结果集中每一条
记录对应根记录的某一列值。
参数可以
指定多列、表达式或函数。不能出现在
connect_condition 和join_condition 中。
connect_by_isleaf
伪列,由GBase 8a 自动维护;用于表
示当前层已经是最后一层。0 表示非最
后一层;1 表示最后一层。不能出现在
connect_condition 和join_conditions 中。
connect_by_iscycle
伪列,由GBase 8a 自动维护。用于表
示当前层是否发生cycle。
0 表示未发生
cycle ;1 表示发生cycle 。只有
NOCYCLE 存在才能使用,否则报错。
SYS_CONNECT_BY_PATH(column,char)
函数,
可通过使用指定的字符作为连接
符,
将分层查询结果的某一列按照分层
路径输出。不能出现在
connect_condition 和join_conditions 中。
Where
Where 子句中所有连接条件均在
hierarchical_clause 之前执行,
所有过滤
条件均在hierarchical_clause 之后执行

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1081
说明

分级查询子句connect by 与start with 不允许出现外层表的列;

分级查询from 子句必须是表,且必须是复制表;

分级查询可以作为子查询出现,但分级查询中不允许出现子查询;

connect by 关联条件不能包含or 操作,并且必须包含父子节点间的等值条
件,等号的两边必须是不同的维度(一边包含prior,一边不包含prior);

prior 是一元操作符,优先级同正负号,只能用在connect by 子句中;prior
后面不可以接伪列(level、rowid 等)、不可以接包含伪列的表达式、不
可以嵌套使用prior、不可以接聚合函数;

order siblings by 只能用在分级查询语句中,
并且不能同聚合、
OLAP 函数、
ORDER BY 同时存在;

不支持实时环路判断,
只能保证最终能够检测出环路,
如果数据量太大
(如
超过十万),会耗时很长才能检测出;

最大节点数为MAX_INT(2147483647)(所有节点数);

新增三个保留字:start、level、prior;

CONNECT BY 后面的condition 不允许包含subquery;
示例
示例1:level 使用在CONNECT BY 位置。
USE test;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(a int, b int, c char(10), d varchar(20), e varchar(5), f
datetime, g decimal(6,2)) REPLICATED;
INSERT INTO t1 VALUES(0,1,'DMD','kds','dmd','2013-4-1 10:23:01',1.1);
INSERT INTO t1 VALUES(0,3,'DMD','cj','dmd','2013-4-1 10:23:01',2.1);
INSERT INTO t1 VALUES (1,3,'DMD','lm','dmd1','2013-4-1 10:23:01',2.2);
INSERT INTO t1 VALUES (1,4,'DMD','zx','dmd2','2013-4-1 10:23:01',2.3);
DROP TABLE IF EXISTS t2;
CREATE TABLE t2 REPLICATED AS SELECT * FROM t1;
gbase> SELECT level, t1.* FROM t1 CONNECT BY NOCYCLE PRIOR b =
level START WITH a = 0;
+-------+------+------+------------+------+------+---------------------+------+
| level | a
| b
| c
| d
| e
| f
| g
|
+-------+------+------+------------+------+------+---------------------+------+
|
1 |
0 |
1 | DMD
| kds
| dmd
| 2013-04-01 10:23:01 |