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

Oracle Apex 22.1树形控件子节点重复问题求助

问题排查与解决方案

核心问题分析

你的树形查询出现第三层节点重复的根本原因是各层级节点的ID设计不唯一,导致CONNECT BY关联逻辑错误:

  • 第二层节点的ID仅使用ORG_UNIT_NAME,该字段可能在不同BU下重复(即使当前数据无重复,设计上存在隐患);
  • 第三层节点的PID仅使用ORG_UNIT_NAME,未关联对应BU,导致所有归属该ORG的DEPT会被挂载到所有同名ORG节点下,而非仅归属的父节点。
    同时原SQL存在多处语法错误(如SELECT子句中多余的逗号),也会干扰查询逻辑。

修正后的查询语句

SELECT 
    CASE 
        WHEN connect_by_isleaf = 1 THEN 0 
        WHEN level = 1 THEN 1 
        ELSE -1 
    END AS status,
    level AS "level",
    display AS name,
    NULL AS icon, 
    id AS id,
    tooltip AS tooltip,
    link AS link
FROM (
    -- 第一层:BU节点
    SELECT 
        bu_name AS display,
        NULL AS pid,
        bu_name AS id,
        1 AS "level",
        'javascript:$s(''P1_SELECTED_NODE'', '''||bu_name||'||||'')' AS link,
        NULL AS tooltip 
    FROM dept_bu_list
    GROUP BY bu_name
    
    UNION ALL       
    -- 第二层:ORG节点,用BU+ORG组合确保ID唯一
    SELECT 
        org_unit_name AS display,
        bu_name AS pid,
        bu_name || '|' || org_unit_name AS id,
        2 AS "level",
        'javascript:$s(''P1_SELECTED_NODE'', '''||bu_name||'|'||org_unit_name||'|||'')' AS link,
        NULL AS tooltip 
    FROM dept_bu_list
    GROUP BY bu_name, org_unit_name
    
    UNION ALL       
    -- 第三层:DEPT节点,PID对应第二层的组合ID,保证关联正确父节点
    SELECT 
        dept_name AS display,
        bu_name || '|' || org_unit_name AS pid,
        bu_name || '|' || org_unit_name || '|' || dept_name AS id,
        3 AS "level",
        'javascript:$s(''P1_SELECTED_NODE'', '''||bu_name||'|'||org_unit_name||'|'||dept_name||'||'')' AS link,
        NULL AS tooltip 
    FROM dept_bu_list
    GROUP BY bu_name, org_unit_name, dept_name
)
START WITH pid IS NULL
CONNECT BY PRIOR id = pid
ORDER SIBLINGS BY display

关键修正点说明

  1. 节点ID唯一性:
    • 第二层节点ID采用bu_name || '|' || org_unit_name组合,避免不同BU下的同名ORG被视为同一节点;
    • 第三层节点ID采用bu_name || '|' || org_unit_name || '|' || dept_name组合,唯一标识每个DEPT节点。
  2. 父节点关联正确性:
    • 第三层节点的PID使用第二层的组合ID,而非仅ORG_UNIT_NAME,保证DEPT只挂载到所属的BU+ORG节点下,不会跨BU关联。
  3. 简化冗余逻辑:移除原SQL中嵌套的冗余子查询(带count(1)的统计无需保留),直接从原表分组获取维度值。
  4. 修复语法错误:清除SELECT子句中多余的逗号,确保SQL可正常执行。

验证效果

执行修正后的SQL后,树形结构会按预期显示:

A_BU
  AX_ORG
    A1_DEPT

B_BU
  AY_ORG
    A1_DEPT  -- 注:根据你提供的INSERT语句,B_BU对应的DEPT是A1_DEPT,若需显示A2_DEPT需修正INSERT数据为(2,'B_BU','AY_ORG','A2_DEPT')

C_BU
  CX_ORG
    A3_DEPT
    A4_DEPT

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:14:52