如何解决ORA-30929:此处不允许使用ORDER SIBLINGS BY子句
我试图编写一个SQL以显示分层模式。我的第一次尝试是使用单个数据,因为以下SQL可以正常工作。
SELECT CONCAT (LPAD (' ',LEVEL*3-3),M.MODULE) MODULE,M.ABBREVIATION,M.PARENT
FROM MRS_CUSTOM.CL_MODULES M
CONNECT BY PRIOR M.ABBREVIATION = M.parent
START WITH M.PARENT IS NULL
ORDER SIBLINGS BY M.MODULE;
此sql将显示以下内容:
Admissions ADMIS
Admissions Correspondence ADMCO ADMIS
Agent Interface to Applicant Portal ADAIAP ADMIS
Applicant Portal ADMP ADMIS
Statistics APSTAT ADMP
My.Application Portal MYAP ADMIS
Precedents ADMIS_PRD ADMIS
Selection Process Management SPM ADMIS
Advanced Standing ADVSTG
Precedents ADVSTG_PRD ADVSTG
Archive Module AM
现在我需要附加到此
select (CONCAT (LPAD (' ',M.MODULE))
MODULE,M.PARENT,count(distinct(RS.REPORT_ID)) as
NUM_REPORTS,count(distinct(MP.DB_ROLE)) as NUM_ROLES
from MRS_CUSTOM.CL_MODULES M,MRS_CUSTOM.CL_MODULE_PRIVS MP,MRS_CUSTOM.CL_REPORT_SPECS RS
where M.ABBREVIATION = RS.MODULE(+) and
M.ABBREVIATION = MP.ABBREVIATION(+)
CONNECT BY PRIOR M.ABBREVIATION = M.parent
START WITH M.PARENT IS NULL
group by M.ABBREVIATION,M.MODULE,M.PARENT
ORDER SIBLINGS BY M.MODULE;
但是我得到了错误
ORA-30929: ORDER SIBLINGS BY clause not allowed here
解决方法
您可以先进行联接,然后对联接的结果执行分层查询:
SELECT CONCAT (LPAD (' ',LEVEL*3-3),M.MODULE) MODULE,M.ABBREVIATION,M.PARENT,M.NUM_REPORTS,M.NUM_ROLES
FROM (
select M.MODULE,count(distinct(RS.REPORT_ID)) as NUM_REPORTS,count(distinct(MP.DB_ROLE)) as NUM_ROLES
from MRS_CUSTOM.CL_MODULES M
left join MRS_CUSTOM.CL_REPORT_SPECS RS
on RS.MODULE = M.ABBREVIATION
left join MRS_CUSTOM.CL_MODULE_PRIVS MP
on MP.ABBREVIATION = M.ABBREVIATION
group by M.ABBREVIATION,M.MODULE,M.PARENT
) M
CONNECT BY PRIOR M.ABBREVIATION = M.parent
START WITH M.PARENT IS NULL
ORDER SIBLINGS BY M.MODULE;
我改用ANSI联接语法,而不是Oracle的老式联接。
db<>fiddle中包含一些异常数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。