我遇到了一个问题,即我使用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节点必须有两个节点
答案 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);