1

dynatree( https://code.google.com/p/dynatree/ )を使用するには、結果を以下のxml形式にしたいのですが、結果は私が望むものではありません。ダイナツリーは、ツリーを編成するために 2 番目のダイナツリーを必要とします。

誰でも私を助けることができますか?

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>

望ましい結果

<ul>
  <li id="7839">KING
   <ul>
    <li id="7566">JONES
     <ul>
      <li id="7788">SCOTT
       <ul>
        <li id="7876">ADAMS</li>
       </ul>
      </li>
      <li id="7902">FORD
       <ul>
        <li id="7369">SMITH</li>
       </ul>
      </li>
     </ul>
    </li>
    <li id="7698">BLAKE
     <ul>
      <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>
    </li>
    <li id="7782">CLARK
     <ul>
      <li id="7934">MILLER</li>
     </ul>
    </li>
   </ul>
  </li>
 </ul>

SQLスクリプトは次のとおりです。

CREATE TABLE EMP
       (EMPNO NUMBER(4) NOT NULL,
        ENAME VARCHAR2(10),
        JOB VARCHAR2(9),
        MGR NUMBER(4),
        HIREDATE DATE,
        SAL NUMBER(7, 2),
        COMM NUMBER(7, 2),
        DEPTNO NUMBER(2));

INSERT INTO EMP VALUES
        (7369, 'SMITH',  'CLERK',     7902,
        TO_DATE('17-12-1980', 'DD-MM-YYYY'),  800, NULL, 20);

INSERT INTO EMP VALUES
        (7499, 'ALLEN',  'SALESMAN',  7698,
        TO_DATE('20-02-1981', 'DD-MM-YYYY'), 1600,  300, 30);

INSERT INTO EMP VALUES
        (7521, 'WARD',   'SALESMAN',  7698,
        TO_DATE('22-02-1981', 'DD-MM-YYYY'), 1250,  500, 30);

INSERT INTO EMP VALUES
        (7566, 'JONES',  'MANAGER',   7839,
        TO_DATE('02-04-1981', 'DD-MM-YYYY'),  2975, NULL, 20);

INSERT INTO EMP VALUES
        (7654, 'MARTIN', 'SALESMAN',  7698,
        TO_DATE('28-09-1981', 'DD-MM-YYYY'), 1250, 1400, 30);

INSERT INTO EMP VALUES
        (7698, 'BLAKE',  'MANAGER',   7839,
        TO_DATE('01-05-1981', 'DD-MM-YYYY'),  2850, NULL, 30);

INSERT INTO EMP VALUES
        (7782, 'CLARK',  'MANAGER',   7839,
        TO_DATE('09-06-1981', 'DD-MM-YYYY'),  2450, NULL, 10);

INSERT INTO EMP VALUES
        (7788, 'SCOTT',  'ANALYST',   7566,
        TO_DATE('09-12-1982', 'DD-MM-YYYY'), 3000, NULL, 20);

INSERT INTO EMP VALUES
        (7839, 'KING',   'PRESIDENT', NULL,
        TO_DATE('17-11-1981', 'DD-MM-YYYY'), 5000, NULL, 10);

INSERT INTO EMP VALUES
        (7844, 'TURNER', 'SALESMAN',  7698,
        TO_DATE('08-09-1981', 'DD-MM-YYYY'),  1500, NULL, 30);

INSERT INTO EMP VALUES
        (7876, 'ADAMS',  'CLERK',     7788,
        TO_DATE('12-01-1983', 'DD-MM-YYYY'), 1100, NULL, 20);

INSERT INTO EMP VALUES
        (7900, 'JAMES',  'CLERK',     7698,
        TO_DATE('03-12-1981', 'DD-MM-YYYY'),   950, NULL, 30);

INSERT INTO EMP VALUES
        (7902, 'FORD',   'ANALYST',   7566,
        TO_DATE('03-12-1981', 'DD-MM-YYYY'),  3000, NULL, 20);

INSERT INTO EMP VALUES
        (7934, 'MILLER', 'CLERK',     7782,
        TO_DATE('23-01-1982', 'DD-MM-YYYY'), 1300, NULL, 10);
4

1 に答える 1

0

こんにちは、ケースロジックを逆にします。テストしたところ、機能していることがわかりました

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>

これが必要なものかどうかを確認して更新します。

于 2013-03-13T09:57:44.050 に答える