Oracle
 sql >> база данни >  >> RDS >> Oracle

Обединете XMLType възли в заявка на Oracle

concat() SQL функцията конкатенира две стойности, така че просто добавя точката и запетаята към всяка извлечена стойност независимо. Но вие наистина се опитвате да извършите агрегиране на низове на резултатите (което, вероятно, наистина може да бъде повече от две извлечени стойности).

Можете да използвате XMLQuery вместо екстракт и да използвате XPath string-join() функция за извършване на конкатентация:

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

Демо с фиксирани XMl тагове на крайния възел:

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

Можете също така да извлечете всички отделни <B> стойности с помощта на XMLTable и след това използвайте агрегиране на ниво SQL:

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

което ви дава повече гъвкавост и би позволило по-лесно групиране по други стойности на възли, но това изглежда не е необходимо тук въз основа на примерната ви стойност.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да инсталирате SQLcl на Mac

  2. Механизъм, следван от Oracle, когато правим горещо архивиране

  3. Проверка дали даден елемент не съществува в друга таблица

  4. Как да въведете специални символи като &в базата данни на Oracle?

  5. Когато извикам PreparedStatement.cancel() в JDBC приложение, наистина ли го убива в база данни на Oracle?