Oracle
 sql >> Database >  >> RDS >> Oracle

ottenere nome e valore dall'attributo xmltype in Oracle

Eri quasi arrivato al tuo primo tentativo. Durante la valutazione dell'XPath, quando sei all'interno dell'elenco degli attributi con /TableAConfig/@* , non hai bisogno di text() per ottenere il valore dell'attributo al suo interno. Sei già a livello di attributo, quindi stai usando solo un "punto" . per il nodo corrente sarebbe sufficiente.

Quindi prova qualcosa del genere -

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

L'unica differenza rispetto al primo tentativo è l'xpath del value attributo.