XMLType 连接相同 xml 标签的多个实例

XMLType Concat multiple instances of the same xml tag

我的出发点是这个问题:

现在,我有这个简单的例子:

DECLARE
  l_head_xml     XMLTYPE
  := xmltype.CREATEXML(
     '<ord>
        <head>
          <ord_code>123</ord_code>
          <ord_date>01-01-2015</ord_date>
        </head>
      </ord>');

  l_pos_xml      XMLTYPE
  := xmltype.CREATEXML(
     '<pos>
        <pos_code>456</pos_code>
        <pos_desc>description</pos_desc>
      </pos>');

  l_complete_xml XMLTYPE;
BEGIN

  FOR i IN 1 .. 2
  LOOP
    SELECT XMLELEMENT("MAIN_TAG",
                      XMLAGG(XMLCONCAT(l_head_xml, l_pos_xml)))
    INTO l_complete_xml
    FROM dual;
  END LOOP;

  dbms_output.put_line(l_complete_xml.getstringval());
END;

在我的例子中,我有一个循环获取这两个标签的多个实例:l_head_xmll_pos_xml。我的最终结果是这样的:

  <MAIN_TAG>
    <Item>
        <ord>
            <head>
                <ord_code>123</ord_code>
                <ord_date>01-01-2015</ord_date>
            </head>
        </ord>
        <pos>
            <pos_code>456</pos_code>
            <pos_desc>description</pos_desc>
        </pos>
    </Item>
    <Item>
        <ord>
            <head>
                <ord_code>123</ord_code>
                <ord_date>01-01-2015</ord_date>
            </head>
        </ord>
        <pos>
            <pos_code>456</pos_code>
            <pos_desc>description</pos_desc>
        </pos>
    </Item>
</MAIN_TAG>

我该怎么做,使用 XML 类型函数(未弃用 - 我使用的是 Oracle 11g)并且不使用临时变量连接每个实例上的每个 XML 块。

在聚合之前使用子查询将记录相乘即可:

SELECT
    XMLELEMENT ("MAIN_TAG", XMLAGG (XMLCONCAT (l_head_xml, l_pos_xml)))
    INTO l_complete_xml
FROM
    (SELECT DUMMY FROM DUAL CONNECT BY LEVEL <= 2);