Byłeś prawie na miejscu przy pierwszej próbie. Podczas oceniania XPath, gdy jesteś na liście atrybutów z /TableAConfig/@*
, nie potrzebujesz text()
aby uzyskać wartość atrybutu w nim zawartego. Jesteś już na poziomie atrybutu, więc użyj tylko „kropki” .
dla bieżącego węzła wystarczy.
Spróbuj więc czegoś takiego -
SELECT XMLElement("TableAConfigList",
(SELECT
XMLAgg(
XMLElement("TableAConfig",
XMLAttributes(
tmp."attr_name" as "name",
tmp."attr_text" as "value"
)
)
) from XMLTable('/TableAConfig/@*'
passing TableA.TableA_config
columns
"attr_name" varchar(30) path 'name()',
"attr_text" varchar(30) path '.'
) tmp
)
) from dual
Jedyną różnicą w stosunku do pierwszej próby jest xpath value
atrybut.