You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
);

代码说明

  1. 内层查询使用CONNECT BY向上递归,从目标节点开始遍历所有父节点,LEVEL值越小代表节点越靠近目标节点
  2. LISTAGG聚合时按LEVEL倒序排序,保证拼接顺序为根节点到目标子节点,符合要求
  3. 若需要保留路径分隔符或调整拼接间隔,可修改LISTAGG的第一个参数的分隔符即可。

内容的提问来源于stack exchange,提问作者user12259208

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:27:04