2013-08-31 2 views
4

내 XML은 내가 좋아하는 것이PL/SQL에서 XML을 통해 여러 루프 작업을 수행하는 방법에

<data> 
    <row> 
     <id>1</id> 
     <name>John</name> 
     <name>Jack</name> 
    </row> 
    <row> 
     <id>2</id> 
     <name>Scott</name> 
     <name>Chuck</name> 
     <name>Kim</name> 
    </row> 
</data> 

과 같은 출력 :

내 현재 코드는 다음과 같습니다
->1 
-->John 
-->Jack 
->2 
-->Scott 
-->Chuck 
-->Kim 

:

DECLARE 
     X XMLTYPE := XMLTYPE('<?xml version="1.0" ?> 
    <data> 
     <row> 
      <id>1</id> 
      <name>John</name> 
      <name>Jack</name> 
     </row> 
     <row> 
      <id>2</id> 
      <name>Scott</name> 
      <name>Chuck</name> 
      <name>Kim</name> 
     </row> 
    </data>'); 
    BEGIN 
     FOR R IN (SELECT EXTRACTVALUE(VALUE(P), '/row/id/text()') AS NAME 

        FROM TABLE(XMLSEQUENCE(EXTRACT(X, '//data/row'))) P) 
     LOOP 
      DBMS_OUTPUT.PUT_LINE('-->' || R.NAME); 
     END LOOP; 
    END; 

이름 태그를 반복 할 때 하나의 루프 안에 하나 이상의 루프가 필요 하겠지만 어떻게해야할지 모르겠다.

약간의 도움을 주시면 감사하겠습니다.

답변

6

은 나 자신에 의해 그것을 생각 :

DECLARE 
     X XMLTYPE := XMLTYPE('<?xml version="1.0" ?> 
    <data> 
     <row> 
      <id>1</id> 
      <promet> 
      <name>John</name> 
      <name>Jack</name> 
      </promet> 
     </row> 
     <row> 
      <id>2</id> 
      <promet> 
      <name>Scott</name> 
      <name>Chuck</name> 
      <name>Kim</name> 
      </promet> 
     </row> 
    </data>'); 
    BEGIN 
     FOR R IN (SELECT EXTRACTVALUE(VALUE(P), '/row/id/text()') AS ID, 
         EXTRACT(VALUE(P), '/row/promet') AS PROMET 
        FROM TABLE(XMLSEQUENCE(EXTRACT(X, '//data/row'))) P) 
     LOOP 
      DBMS_OUTPUT.PUT_LINE('-->' || R.ID); 
      FOR R1 IN (SELECT EXTRACTVALUE(VALUE(T1), '/name/text()') AS NAME 
         FROM TABLE(XMLSEQUENCE(EXTRACT(R.PROMET, 'promet/name'))) T1) 
      LOOP 
      DBMS_OUTPUT.PUT_LINE('-->' || R1.NAME); 
      END LOOP; 
     END LOOP; 
    END; 
관련 문제