Você estava quase lá com sua primeira tentativa. Ao avaliar o XPath, quando você estiver dentro da lista de atributos com
/TableAConfig/@*
, você não precisa de text()
para obter o valor do atributo dentro dele. Você já está no nível do atributo, então use apenas um "ponto" .
para o nó atual seria suficiente. Então tente algo assim -
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
A única diferença da sua primeira tentativa é o xpath do
value
atributo.