使用for循环重复节点但是在连接xml字符串时,只连接for循环的最后一次迭代?

时间:2014-09-11 08:43:53

标签: sql xml plsql

我遇到了一个问题,即我使用FOR循环生成重复节点。    现在,当我在主节点中连接生成的节点时,我只获得了该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;

这里我只获得一个节点,但PHONE节点必须有两个节点

1 个答案:

答案 0 :(得分: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);