Oracle에서 중첩 된 XML을 쿼리하는 방법은 무엇입니까?

존 알

여러 번 반복되는 EMPLOYEE 노드를 쿼리 / 출력해야합니다. 내 쿼리는 다중 항목 시퀀스를 기대하지 않는다는 오류를 제공합니다. 결국 PLSQL에서 반복되는 EMPLOYEE 데이터를 반복해야합니다. 그러나 먼저 최소한 SQL을 실행하여 원하는 결과를 얻을 수 있기를 바랍니다. 아이디어가 떨어졌습니다.

아래 내 쿼리 및 XML을 참조하십시오.

    select
    xmlt.recordid,
    xmlt.mfirstname,
    xmlt.mlastname,
    xmlt.efirstname,
    xmlt.elastname,
    FROM   
    test_xml x,
    xmltable(xmlnamespaces('http:testxml.com' AS "ns"), '//ns:abccomp' 
    passing            xmltype(x.xml) 
    columns
    recordid varchar2(200) path '//ns:recordid/ns:identification',
    mfirstname varchar2(200)  path '//ns:accounting/ns:manager/ns:personname/ns:firstname',
    mlastname varchar2(200)  path '//ns:accounting/ns:manager/ns:personname/ns:lastname',
    efirstname varchar2(200)  path '//ns:accounting/ns:employee/ns:personname/ns:firstname',
    elastname varchar2(200)  path '//ns:accounting/ns:employee/ns:personname/ns:lastname'
    )Xmlt;


        <ns:wrap
xmlns:ns="http:testxml.com">
<ns:body>
    <ns:abccomp>
        <ns:recordid>
            <ns:identification>955613218915</ns:identification>
        </ns:recordid>
        <ns:accounting>
            <ns:manager>
                <ns:personname>
                    <ns:firstname>frank</ns:firstname>
                    <ns:lastname>phillips</ns:lastname>
                </ns:personname>
            </ns:manager>
            <ns:employee>
                <ns:personname>
                    <ns:firstname>jimmy</ns:firstname>
                    <ns:lastname>smith</ns:lastname>
                </ns:personname>
            </ns:employee>
            <ns:employee>
                <ns:personname>
                    <ns:firstname>yuri</ns:firstname>
                    <ns:lastname>oga</ns:lastname>
                </ns:personname>
            </ns:employee>
                <ns:personname>
                    <ns:firstname>amanda</ns:firstname>
                    <ns:lastname>hicks</ns:lastname>
                </ns:personname>
            </ns:employee>
        </ns:accounting>
    </ns:abccomp>
</ns:body>

</ ns : wrap>

MT0

여러 XMLTABLEs 를 사용할 수 있습니다 .

SELECT x.recordid,
       x.mfirstname,
       x.mlastname,
       e.*
FROM   test_xml t
       CROSS APPLY XMLTABLE(
         xmlnamespaces('http:testxml.com' AS "ns"),
         '//ns:wrap/ns:body/ns:abccomp' 
         PASSING xmltype(t.xml) 
         COLUMNS
           recordid   varchar2(200) path '//ns:recordid/ns:identification',
           mfirstname varchar2(200) path '//ns:accounting/ns:manager/ns:personname/ns:firstname',
           mlastname  varchar2(200) path '//ns:accounting/ns:manager/ns:personname/ns:lastname',
           accounting XMLTYPE       path '//ns:accounting'
       ) x
       CROSS APPLY XMLTABLE(
         xmlnamespaces('http:testxml.com' AS "ns"),
         '//ns:accounting/ns:employee' 
         PASSING x.accounting
         COLUMNS
           efirstname varchar2(200) path '//ns:personname/ns:firstname',
           elastname  varchar2(200) path '//ns:personname/ns:lastname'
       ) e;

출력되는 내용 :

RECORDID | MFIRSTNAME | MLASTNAME | EFIRSTNAME | ELASTNAME 
: ----------- | : --------- | : -------- | : --------- | : -------- 
955613218915 | 솔직한 | 필립스 | 지미 | 스미스     
955613218915 | 솔직한 | 필립스 | 유리 | oga       
955613218915 | 솔직한 | 필립스 | 아만다 | 힉스    

테스트 데이터 (여는 태그 <ns:employee>와 닫는 </ns:wrap>태그가 없음) :

INSERT INTO test_xml ( xml ) VALUES ( '<ns:wrap xmlns:ns="http:testxml.com">
<ns:body>
    <ns:abccomp>
        <ns:recordid>
            <ns:identification>955613218915</ns:identification>
        </ns:recordid>
        <ns:accounting>
            <ns:manager>
                <ns:personname>
                    <ns:firstname>frank</ns:firstname>
                    <ns:lastname>phillips</ns:lastname>
                </ns:personname>
            </ns:manager>
            <ns:employee>
                <ns:personname>
                    <ns:firstname>jimmy</ns:firstname>
                    <ns:lastname>smith</ns:lastname>
                </ns:personname>
            </ns:employee>
            <ns:employee>
                <ns:personname>
                    <ns:firstname>yuri</ns:firstname>
                    <ns:lastname>oga</ns:lastname>
                </ns:personname>
            </ns:employee>
            <ns:employee>
                <ns:personname>
                    <ns:firstname>amanda</ns:firstname>
                    <ns:lastname>hicks</ns:lastname>
                </ns:personname>
            </ns:employee>
        </ns:accounting>
    </ns:abccomp>
</ns:body>
</ns:wrap>' );

db <> 여기에 바이올린

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

RavenDB : MultiMapIndex에서 중첩 된 값을 올바르게 쿼리 / 필터링하는 방법은 무엇입니까?

분류에서Dev

경로없이 중첩 된 문서의 값을 쿼리하는 방법은 무엇입니까?

분류에서Dev

Java에서 중첩 된 xml 파일을 처리하는 방법은 무엇입니까?

분류에서Dev

Elixir에서 중첩 된 if 문을 피하는 방법은 무엇입니까?

분류에서Dev

PostgreSQL의 중첩 된 xml 개체에서 값을 추출하는 방법은 무엇입니까?

분류에서Dev

중첩 된 개체에서 중첩 된 배열을 만드는 방법은 무엇입니까?

분류에서Dev

루비에서 중첩 된 조건을 처리하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

중첩 된 디렉토리에서 파일을 처리하는 방법은 무엇입니까?

분류에서Dev

Cloud Flutter Firestore에서 중첩 된 컬렉션 쿼리를 처리하는 방법은 무엇입니까?

분류에서Dev

중첩 선택에서 중첩 된 두 값을 얻는 방법은 무엇입니까? mysql

분류에서Dev

SpringData Mongo-중첩 된 값에 대해 중첩 된 고유 배열을 얻는 방법은 무엇입니까?

분류에서Dev

R : 중첩 된 목록을 data.frame에 "중첩 해제"하는 방법은 무엇입니까?

분류에서Dev

json_extract ()를 사용하여 SQL에서 중첩 된 JSON 데이터 값을 쿼리하는 방법은 무엇입니까?

분류에서Dev

탄력적 검색에서 중첩 된 JSON 객체 / 필드를 쿼리하는 방법은 무엇입니까?

분류에서Dev

시맨틱 미디어 위키에서 중첩 된 쿼리의 속성을 표시하는 방법은 무엇입니까?

분류에서Dev

중첩 된 클래스 구조에서 속성 중복을 피하는 방법은 무엇입니까?

분류에서Dev

중첩 된 딕셔너리에 동적으로 값을 추가하는 방법은 무엇입니까?

분류에서Dev

Mongoose-중첩 된 개체가 쿼리에 이미 있는지 확인하는 방법은 무엇입니까?

분류에서Dev

내 쿼리 결과에서 반전 된 중복을 제거하는 방법은 무엇입니까?

분류에서Dev

반응에서 중첩 된 JSON을 렌더링하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

중첩 된 사전을 처리하는 방법은 무엇입니까?

분류에서Dev

중첩 된 약속을 처리하는 방법은 무엇입니까?

분류에서Dev

두 개의 중첩 된 jquery 메서드에서 값을 반환하는 방법은 무엇입니까?

분류에서Dev

중첩 된 JSON에서 값을 추출하고 계산하는 방법은 무엇입니까?

분류에서Dev

중첩 된 사전에서 쉼표로 구분 된 값을 만드는 방법은 무엇입니까?

분류에서Dev

"중첩 된 div"구성을 중앙에 배치하는 방법은 무엇입니까?

분류에서Dev

중첩 된 원격 세션에서 Byobu 키 바인딩을 사용하는 방법은 무엇입니까?

분류에서Dev

여러 Mongoose 작업에서 중첩 된 약속을 피하는 방법은 무엇입니까?

분류에서Dev

Object에서 중첩 된 속성을 확산하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    RavenDB : MultiMapIndex에서 중첩 된 값을 올바르게 쿼리 / 필터링하는 방법은 무엇입니까?

  2. 2

    경로없이 중첩 된 문서의 값을 쿼리하는 방법은 무엇입니까?

  3. 3

    Java에서 중첩 된 xml 파일을 처리하는 방법은 무엇입니까?

  4. 4

    Elixir에서 중첩 된 if 문을 피하는 방법은 무엇입니까?

  5. 5

    PostgreSQL의 중첩 된 xml 개체에서 값을 추출하는 방법은 무엇입니까?

  6. 6

    중첩 된 개체에서 중첩 된 배열을 만드는 방법은 무엇입니까?

  7. 7

    루비에서 중첩 된 조건을 처리하는 가장 좋은 방법은 무엇입니까?

  8. 8

    중첩 된 디렉토리에서 파일을 처리하는 방법은 무엇입니까?

  9. 9

    Cloud Flutter Firestore에서 중첩 된 컬렉션 쿼리를 처리하는 방법은 무엇입니까?

  10. 10

    중첩 선택에서 중첩 된 두 값을 얻는 방법은 무엇입니까? mysql

  11. 11

    SpringData Mongo-중첩 된 값에 대해 중첩 된 고유 배열을 얻는 방법은 무엇입니까?

  12. 12

    R : 중첩 된 목록을 data.frame에 "중첩 해제"하는 방법은 무엇입니까?

  13. 13

    json_extract ()를 사용하여 SQL에서 중첩 된 JSON 데이터 값을 쿼리하는 방법은 무엇입니까?

  14. 14

    탄력적 검색에서 중첩 된 JSON 객체 / 필드를 쿼리하는 방법은 무엇입니까?

  15. 15

    시맨틱 미디어 위키에서 중첩 된 쿼리의 속성을 표시하는 방법은 무엇입니까?

  16. 16

    중첩 된 클래스 구조에서 속성 중복을 피하는 방법은 무엇입니까?

  17. 17

    중첩 된 딕셔너리에 동적으로 값을 추가하는 방법은 무엇입니까?

  18. 18

    Mongoose-중첩 된 개체가 쿼리에 이미 있는지 확인하는 방법은 무엇입니까?

  19. 19

    내 쿼리 결과에서 반전 된 중복을 제거하는 방법은 무엇입니까?

  20. 20

    반응에서 중첩 된 JSON을 렌더링하는 가장 좋은 방법은 무엇입니까?

  21. 21

    중첩 된 사전을 처리하는 방법은 무엇입니까?

  22. 22

    중첩 된 약속을 처리하는 방법은 무엇입니까?

  23. 23

    두 개의 중첩 된 jquery 메서드에서 값을 반환하는 방법은 무엇입니까?

  24. 24

    중첩 된 JSON에서 값을 추출하고 계산하는 방법은 무엇입니까?

  25. 25

    중첩 된 사전에서 쉼표로 구분 된 값을 만드는 방법은 무엇입니까?

  26. 26

    "중첩 된 div"구성을 중앙에 배치하는 방법은 무엇입니까?

  27. 27

    중첩 된 원격 세션에서 Byobu 키 바인딩을 사용하는 방법은 무엇입니까?

  28. 28

    여러 Mongoose 작업에서 중첩 된 약속을 피하는 방법은 무엇입니까?

  29. 29

    Object에서 중첩 된 속성을 확산하는 방법은 무엇입니까?

뜨겁다태그

보관