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

Sammenkæd XMLType-noder i Oracle-forespørgsel

concat() SQL-funktion sammenkæder to værdier, så det er bare at tilføje semikolon til hver ekstraherede værdi uafhængigt. Men du prøver virkelig at lave strengaggregering af resultaterne (som formodentlig virkelig kunne være mere end to ekstraherede værdier).

Du kan bruge XMLQuery i stedet for udtræk og bruge en XPath string-join() funktion for at udføre sammenkædningen:

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

Demo med faste XMl-slutnode-tags:

-- 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

Du kan også udtrække alle de individuelle <B> værdier ved hjælp af XMLTable, og brug derefter aggregering på 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

hvilket giver dig mere fleksibilitet og nemmere ville tillade gruppering efter andre nodeværdier, men det ser ikke ud til at være nødvendigt her baseret på din eksempelværdi.




  1. Hvorfor afrundes casting fra float til varchar i SQL Server?

  2. Sådan viser du dato i et andet format i Oracle

  3. Sådan vises en dato i britisk format i SQL Server (T-SQL)

  4. Hvordan gemmer man arrays i MySQL?