1

次のような XML ツリーがあります。

<root>
    <a>
        <a1>A1</a1>
        <a2>A2</a2>
        ...
        ...
        <an>An</an>
    </a>
    <b>
        <b1>B1</b1>
        <b2>B2</b2>
        ...
        ...
        <bm>Bm</bm>
    </b>
    <x>
        <x1>X1</x1>
        <x2>X2</x2>
        ...
        ...
    </x>
    <y>
        ...
        ...
    </y>
    ...
    ...
</root>

Oracle XMLQuery と XQuery を使用して、この XML を次のように変更します。

<root>
    <a>
        <a1>A1</a1>
        <a2>A2</a2>
        ...
        ...
        <an>An</an>
        <b>
            <b1>B1</b1>
            <b2>B2</b2>
            ...
            ...
            <bm>Bm</bm>
        </b>
    </a>
    <x> <!-- This x node and all its siblings have to stay where they are. -->
        <x1>X1</x1>
        <x2>X2</x2>
        ...
        ...
    </x>
    <y>
        ...
        ...
    </y>
    ...
    ...
</root>

要するに、bノード全体とその子孫をa追加して下に置きたいのです。

私がこれまでに試したことは次のとおりです。

WITH xdata AS (
SELECT XMLTYPE('<root>
                    <a>
                        <a1>A1</a1>
                        <a2>A2</a2>
                    </a>
                    <b>
                        <b1>B1</b1>
                        <b2>B2</b2>
                    </b>
                    <x>
                        <x1>X1</x1>
                        <x2>X2</x2>
                    </x>
                </root>') AS xmldata
  FROM dual
)
SELECT XMLQuery ('for $a in $x1/root/a, $b in $x1/root/b
                  return <root>{$a}{$b}</root>'
                 PASSING x.xmldata AS "x1" RETURNING CONTENT) AS output
  FROM xdata x;

これは明らかに私に非常に間違った結果をもたらします。多分私がしようとしていることは完全に間違っています。助けてください。

4

1 に答える 1