Oracle xml的递归层次查询

Oracle xml的递归层次查询,oracle,recursion,hierarchy,Oracle,Recursion,Hierarchy,要使用dynatree(),我希望结果是下面的xml格式,但结果不是我想要的。 动态树需要第二个来组织树 有人能帮我吗 SELECT XMLELEMENT("div",xmlattributes('tree' AS "id"), (SELECT DBMS_XMLGEN.getXMLType( DBMS_XMLGEN.newContextFromHierarchy(' SELECT LEVEL, case

要使用dynatree(),我希望结果是下面的xml格式,但结果不是我想要的。 动态树需要第二个来组织树

有人能帮我吗

SELECT 
  XMLELEMENT("div",xmlattributes('tree' AS "id"),
       (SELECT DBMS_XMLGEN.getXMLType(
     DBMS_XMLGEN.newContextFromHierarchy('
        SELECT LEVEL,
           case
             when CONNECT_BY_ISLEAF = 0 then
              XMLELEMENT("ul", XMLELEMENT("li", xmlattributes(empno AS "id"), ename))
             when CONNECT_BY_ISLEAF = 1 then
              XMLELEMENT("li", xmlattributes(empno AS "id"), ename)
           end
          FROM emp
         START WITH mgr is null
        CONNECT BY PRIOR empno = mgr '
        )
       ) FROM DUAL
      )) XMLDOC  
 FROM DUAL;
当前结果

<div id="tree"><ul>
  <li id="7839">KING</li>
  <ul>
    <li id="7566">JONES</li>
    <ul>
      <li id="7788">SCOTT</li>
      <li id="7876">ADAMS</li>
    </ul>
    <ul>
      <li id="7902">FORD</li>
      <li id="7369">SMITH</li>
    </ul>
  </ul>
  <ul>
    <li id="7698">BLAKE</li>
    <li id="7499">ALLEN</li>
    <li id="7521">WARD</li>
    <li id="7654">MARTIN</li>
    <li id="7844">TURNER</li>
    <li id="7900">JAMES</li>
  </ul>
  <ul>
    <li id="7782">CLARK</li>
    <li id="7934">MILLER</li>
  </ul>
</ul>
</div>

嗨,把你的案例逻辑颠倒过来,我测试了一下,发现它在工作

SELECT 
--  XMLELEMENT("ul",null,
       (SELECT DBMS_XMLGEN.getXMLType(
     DBMS_XMLGEN.newContextFromHierarchy('
        SELECT LEVEL,
           case
             when CONNECT_BY_ISLEAF = 1 then
              XMLELEMENT("ul", XMLELEMENT("li", xmlattributes(empno AS "id"), ename))
             when CONNECT_BY_ISLEAF = 0 then
              XMLELEMENT("ul", XMLELEMENT("li", xmlattributes(empno AS "id"), ename), null)
           end
          FROM emp
         START WITH mgr is null
        CONNECT BY PRIOR empno = mgr '
        )
       ) FROM DUAL
      )
--      ) XMLDOC  
 FROM DUAL;
请检查您需要的输出是否与问题中指定的完全一致

根据我的说法,输出应如下所示:

<ul>
  <li id="7839">KING</li>
  <ul>
    <li id="7566">JONES</li>
    <ul>
      <li id="7788">SCOTT</li>
      <ul>
        <li id="7876">ADAMS</li>
      </ul>
    </ul>
    <ul>
      <li id="7902">FORD</li>
      <ul>
        <li id="7369">SMITH</li>
      </ul>
    </ul>
  </ul>
  <ul>
    <li id="7698">BLAKE</li>
    <ul>
      <li id="7499">ALLEN</li>
    </ul>
    <ul>
      <li id="7521">WARD</li>
    </ul>
    <ul>
      <li id="7654">MARTIN</li>
    </ul>
    <ul>
      <li id="7844">TURNER</li>
    </ul>
    <ul>
      <li id="7900">JAMES</li>
    </ul>
  </ul>
  <ul>
    <li id="7782">CLARK</li>
    <ul>
      <li id="7934">MILLER</li>
    </ul>
  </ul>
</ul>
    国王
      琼斯
        斯科特
          亚当斯
        福特
          史密斯
      布莱克
        艾伦
        病房
        马丁
        特纳
        詹姆斯
      克拉克
        米勒

检查并更新您是否需要这些数据。

您拥有的表格数据是什么…?,即表格名称…数据是什么,…显示可用的数据…添加了表格创建脚本和数据插入脚本。您好,请确认您的问题是否已解决。
SELECT 
--  XMLELEMENT("ul",null,
       (SELECT DBMS_XMLGEN.getXMLType(
     DBMS_XMLGEN.newContextFromHierarchy('
        SELECT LEVEL,
           case
             when CONNECT_BY_ISLEAF = 1 then
              XMLELEMENT("ul", XMLELEMENT("li", xmlattributes(empno AS "id"), ename))
             when CONNECT_BY_ISLEAF = 0 then
              XMLELEMENT("ul", XMLELEMENT("li", xmlattributes(empno AS "id"), ename), null)
           end
          FROM emp
         START WITH mgr is null
        CONNECT BY PRIOR empno = mgr '
        )
       ) FROM DUAL
      )
--      ) XMLDOC  
 FROM DUAL;
<ul>
  <li id="7839">KING</li>
  <ul>
    <li id="7566">JONES</li>
    <ul>
      <li id="7788">SCOTT</li>
      <ul>
        <li id="7876">ADAMS</li>
      </ul>
    </ul>
    <ul>
      <li id="7902">FORD</li>
      <ul>
        <li id="7369">SMITH</li>
      </ul>
    </ul>
  </ul>
  <ul>
    <li id="7698">BLAKE</li>
    <ul>
      <li id="7499">ALLEN</li>
    </ul>
    <ul>
      <li id="7521">WARD</li>
    </ul>
    <ul>
      <li id="7654">MARTIN</li>
    </ul>
    <ul>
      <li id="7844">TURNER</li>
    </ul>
    <ul>
      <li id="7900">JAMES</li>
    </ul>
  </ul>
  <ul>
    <li id="7782">CLARK</li>
    <ul>
      <li id="7934">MILLER</li>
    </ul>
  </ul>
</ul>