Ya casi habías llegado con tu primer intento. Mientras evalúa XPath, cuando está dentro de la lista de atributos con /TableAConfig/@*
, no necesitas text()
para obtener el valor del atributo dentro de él. Ya está en el nivel de atributo, por lo que solo usa un "punto" .
para el nodo actual sería suficiente.
Así que prueba algo como esto -
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
La única diferencia con su primer intento es el xpath del value
atributo.