2014-09-11 1 views
0

반복 노드를 생성하기 위해 FOR 루프를 사용하고 있다는 문제점이 있습니다. 이제 주 노드에서 생성 된 노드를 연결할 때 FOR 루프의 마지막 반복 만 얻었습니다. 누군가가 나에게이 오류를 처리 할 수있는 방법을 제안 할 수 .... 여기 반복 노드는 for 루프를 사용하지만 xml 문자열을 연결할 때는 for 루프의 마지막 반복 만 연결하면됩니까?

FOR i IN 1..pl_phone_tab.Count 
LOOP 
SELECT xmlelement("Phone" 
        ,xmlelement("PHONETYPE",xmlattributes('01' AS "dmnADRP_PHONETYPE"),pl_phone_tab(i).p_phtype_tab) 
        ,xmlelement("PHONENUM",pl_phone_tab(i).p_phnum_tab) 
        ,xmlelement("PRIMARY_CONTACT",pl_phone_tab(i).p_prcon_tab) 
       ) 
INTO p_phone_xml 
FROM dual; 
END LOOP; 


SELECT xmlelement("PhoneInfo" 
         ,xmlconcat(p_phone_xml)) 
INTO p_phone_info_xml 
FROM dual; 

내가 하나 개의 노드를 받고 있지만 전화 노드

답변

0

각 루프 반복을위한 두 개의 노드 있어야만하고는 이전 값을 덮어 씁니다 p_phone_xml, 마지막에는 XML의 마지막 테이블 요소 만 있습니다.

루프 내에서 xmlconcat을 사용하여 각 반복 결과를 p_phone_xml에 추가합니다.

FOR i IN 1 .. pl_phone_tab.Count 
LOOP 
    SELECT xmlconcat(p_phone_xml 
        ,xmlelement("Phone" 
           ,xmlelement("PHONETYPE" 
             ,xmlattributes('01' AS 
                 "dmnADRP_PHONETYPE") 
             ,pl_phone_tab(i).p_phtype_tab) 
           ,xmlelement("PHONENUM" 
             ,pl_phone_tab(i).p_phnum_tab) 
           ,xmlelement("PRIMARY_CONTACT" 
             ,pl_phone_tab(i).p_prcon_tab))) 
    INTO p_phone_xml 
    FROM dual; 
END LOOP; 

p_phone_info_xml := p_phone_info_xml.appendchildxml('/somepath/PhoneInfo' 
                ,p_phone_xml); 
+0

하지만이 코드는 전체 XML (또는 노드)을 반복합니다.이 노드를 노드의 작은 조각으로 연결하고 기본 XML에이 노드를 연결해야합니다. 당신은 저에게이 작업을 수행하는 방법을 보여줍니다. 2 일 후에 여기에서 붙어 있습니다. – mradul

+0

'p_phone_info_xml'에 이미 XML이 있고'p_phone_xml'을 추가하고 싶습니까? – foobarbaz

+0

네, 그렇게 할 수도 있습니다. 그런데 논리는 제가 여기서 구현하고있는 것을 설명 할 것입니다. 저는 여기에 복잡한 XML을 생성하고 있습니다. XML에 다른 노드가 있으므로 각 노드마다 다른 프로 시저 및 나중에 나는이 코드를 모듈화하기 위해 메인 XML에서이 노드들을 연결한다.이 노드에서 PhoneInfo는 휴대 전화 나 기본 유선 전화가 있기 때문에 반복적 인 작은 노드 폰을 가지고있다. 따라서이 PhoneInfo 노드는 contactInfo 노드와 연결되며 contactInfo는 주 노드에서 연결을 가져옵니다. 문제는 반복 노드입니다. – mradul