Suw*_*bar 1 sql oracle recursive-query hierarchical-data hierarchical-query
我有一个查询来查看父子层次数据列表。在运行下面的查询时,我得到了错误ORA-01436。
SELECT ParentPropertyRSN, CONNECT_BY_ROOT PropertyRSN as PropertyRSN,
LEVEL, SYS_CONNECT_BY_PATH(ParentPropertyRSN, '/') Path
FROM Property
CONNECT BY PRIOR PropertyRSN = ParentPropertyRSN
order by level desc;
Run Code Online (Sandbox Code Playgroud)
所以我NOCYCLE在CONNECT BY子句中添加并获得了完整的数据列表及其分层路径
现在我需要的是一个查询来获取包含不准确数据的行列表ORA-01436。
您确实应该使用NOCYCLE来避免无限循环。最重要的是,您可以使用CONNECT_BY_ISCYCLE来识别违规行:
SELECT
ParentPropertyRSN,
CONNECT_BY_ROOT PropertyRSN as PropertyRSN,
LEVEL,
SYS_CONNECT_BY_PATH(ParentPropertyRSN, '/') Path,
CONNECT_BY_ISCYCLE Has_Cycle
FROM Property
CONNECT BY NOCYCLE PRIOR PropertyRSN = ParentPropertyRSN
ORDER BY level desc;
Run Code Online (Sandbox Code Playgroud)
从文档:
该
CONNECT_BY_ISCYCLE虚列返回1如果当前行有一个孩子,这也是它的祖先。否则返回0。
CONNECT_BY_ISCYCLE仅当您指定NOCYCLE了CONNECT BY子句的参数时才能指定。NOCYCLE使 Oracle 能够返回查询的结果,否则会因CONNECT BY数据中的循环而失败。