sql >> Database >  >> RDS >> Oracle

XMLType-knooppunten samenvoegen in Oracle-query

De concat() De SQL-functie voegt twee waarden samen, dus het voegt alleen de puntkomma toe aan elke geëxtraheerde waarde onafhankelijk. Maar je probeert echt string-aggregatie van de resultaten uit te voeren (wat vermoedelijk echt meer dan twee geëxtraheerde waarden zou kunnen zijn).

U kunt XMLQuery gebruiken in plaats van extract, en een XPath string-join() . gebruiken functie om de aaneenschakeling te doen:

XMLQuery('string-join(/A/B, ";")' passing xmltype(a.xml) returning content)

Demo met vaste XMl-eindknooppunttags:

-- CTE for sample data
with a (xml) as (
  select '<A><B>123</B><C>456</C><B>789</B></A>' from dual
)
-- actual query
select XMLQuery('string-join(/A/B, ";")' passing xmltype(a.xml) returning content) as result
from a;

RESULT
------------------------------
123;789

Je zou ook alle individuele <B> . kunnen extraheren waarden met XMLTable en gebruik vervolgens aggregatie op SQL-niveau:

-- CTE for sample data
with a (xml) as (
  select '<A><B>123</B><C>456</C><B>789</B></A>' from dual
)
-- actual query
select listagg(x.b, ';') within group (order by null) as result
from a
cross join XMLTable('/A/B' passing xmltype(a.xml) columns b number path '.') x;

RESULT
------------------------------
123;789

dat geeft u meer flexibiliteit en maakt groepering op andere knooppuntwaarden gemakkelijker, maar dat lijkt hier niet nodig op basis van uw voorbeeldwaarde.




  1. SQL-gegevenstypen:5 slechtste keuzes die u vandaag moet stoppen

  2. Hoe maak je verbinding met meerdere MySQL-databases op één webpagina?

  3. Uw Django-project migreren naar Heroku

  4. Hoe de recursieve SELECT-query in MySQL te doen?