Java层级引用拼接逻辑如何迁移为Oracle递归SQL实现
Oracle 层级引用完整描述拼接SQL实现
实现逻辑说明
- 以输入的目标
ref_id为起点向上递归查询所有上级父节点 - 对每个节点按给定的
ref_type_id规则生成对应转换文本 - 按根节点到目标子节点的顺序拼接所有转换文本,得到最终完整描述
适配说明
示例输出article 4 par 14中关键字与值之间存在空格,因此对原CASE规则做了空格补充,若不需要空格可自行删除对应拼接部分的空格。
完整SQL代码
-- :target_ref_id 为输入的指定ref_id参数 SELECT LISTAGG(node_desc, ' ') WITHIN GROUP (ORDER BY lvl DESC) AS full_description FROM ( SELECT -- 按规则生成节点转换文本 CASE ref_type_id WHEN 1 THEN 'article ' || ref_value WHEN 2 THEN 'par ' || ref_value WHEN 3 THEN '(' || ref_value WHEN 4 THEN 'point ' || ref_value WHEN 5 THEN 'sous ' || ref_value WHEN 6 THEN ref_value WHEN 8 THEN ref_value WHEN 7 THEN '/' || ref_value ELSE '/' END AS node_desc, LEVEL AS lvl FROM grf_reference -- 起点为输入的目标ref_id START WITH ref_id = :target_ref_id -- 向上递归关联父节点 CONNECT BY PRIOR parent_ref_id = ref_id );
代码说明
- 内层查询使用
CONNECT BY向上递归,从目标节点开始遍历所有父节点,LEVEL值越小代表节点越靠近目标节点 LISTAGG聚合时按LEVEL倒序排序,保证拼接顺序为根节点到目标子节点,符合要求- 若需要保留路径分隔符或调整拼接间隔,可修改
LISTAGG的第一个参数的分隔符即可。
内容的提问来源于stack exchange,提问作者user12259208
相关产品推荐
相关产品推荐

