返回首页

gbase数据、南大通用产品文档:GBase8awith 语句包含递归sql 改写

更新日期:2024年09月11日

问题现象
with 语句包含递归sql 改写。
处理方法
示例1
create table A_ORGAN(id int,name varchar(16),parent int);
insert into A_ORGAN values(1,'南大通用',0);
insert into A_ORGAN values(2,'行销部',1);
insert into A_ORGAN values(3,'专业服务组',2);
insert into A_ORGAN values(4,'售后组',2);
with rpl(id,name,parent) as
(select id, name, parent
from A_ORGAN
where parent =1
union all
select t1.id, t1.name, t1.parent
from rpl t2, A_ORGAN t1
where t2.id = t1.parent)
select * from rpl

GBase 8a MPP Cluster 最佳实践
5 FAQ
文档版本(2022-02-11)
南大通用数据技术股份有限公司
116
oracle 中执行结果
SQL> with rpl(id,name,parent) as
2
(select id, name, parent
3
from A_ORGAN
4
where parent =1
5
union all
6
select t1.id, t1.name, t1.parent
7
from rpl t2, A_ORGAN t1
8
where t2.id = t1.parent)
9
select * from rpl ;
ID NAME
PARENT
---------- ---------------- ----------
2 行销部
1
3 专业服务组
2
4 售后组
2
SQL>
示例2
在GBase 8a 中目前不支持这种复杂的with 语句,使用START WITH CONNECT
BY 改写,由于当前限制只支持复制表,改写如下:
create table A_ORGAN1(id int,name varchar(16),parent int)replicated;
SELECT ID
,NAME
,PARENT
FROM A_ORGAN1 start WITH PARENT = 1
connect BY prior ID = PARENT;

GBase 8a MPP Cluster 最佳实践
5 FAQ
文档版本(2022-02-11)
南大通用数据技术股份有限公司
117
gbase> SELECT ID
-> ,NAME
-> ,PARENT
-> FROM A_ORGAN1 start WITH PARENT = 1
-> connect BY prior ID = PARENT;
+------+-----------------+--------+
| ID
| NAME
| PARENT |
+------+-----------------+--------+
|
2 | 行销部
|
1 |
|
3 | 专业服务组
|
2 |
|
4 | 售后组
|
2 |
+------+-----------------+--------+
3 rows in set (Elapsed: 00:00:00.00)

使用 onmode -I 选项开始和停止诊断信息的收集。
遇到错误时,可以指定 onmode -I iserrno 选项启动收集诊断信息。也可以指定会话 ID 或
收集仅指定的会话的信息。
使用 -I 选项(不需要附加其他参数)停止诊断信息的收集。

元素
用途
关键注意事项
iserrno 要收集诊断信息的错误的错误编号

sid
要收集诊断信息的会话的会话 ID



GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 366 -
诊断信息收集程序在 GBase 8s 管理员指南 中描述。

node (172.168.83.14)
backup database begin