Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

obtendo nome e valor do atributo xmltype no oracle


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.