Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Połącz węzły XMLType w zapytaniu Oracle

concat() Funkcja SQL łączy dwie wartości, więc po prostu dołącza średnik do każdej wyodrębnionej wartości niezależnie. Ale tak naprawdę próbujesz wykonać agregację ciągów wyników (która prawdopodobnie może być naprawdę więcej niż dwiema wyodrębnionymi wartościami).

Możesz użyć XMLQuery zamiast wyodrębniania i użyć XPath string-join() funkcja do wykonania konkatentacji:

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

Demo ze stałymi tagami węzłów końcowych 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

Możesz także wyodrębnić wszystkie indywidualne <B> wartości przy użyciu XMLTable, a następnie użyj agregacji na poziomie 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

co zapewnia większą elastyczność i umożliwia łatwiejsze grupowanie według innych wartości węzłów, ale wydaje się, że nie jest to tutaj potrzebne na podstawie przykładowej wartości.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyszukaj wartość w kolumnie wartości, która przechowuje wartości oddzielone przecinkami

  2. Witryna niedostępna i kanał na Twitterze

  3. Jak mogę zrobić wsadowe wstawianie do bazy danych Oracle za pomocą Pythona?

  4. Zainstaluj klienta bazy danych Oracle krok po kroku

  5. Jak tworzyć procedury składowane PL/SQL z parametrami w bazie danych Oracle