Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Gabungkan node XMLType dalam kueri Oracle

concat() Fungsi SQL menggabungkan dua nilai, jadi itu hanya menambahkan titik koma ke setiap nilai yang diekstraksi secara independen. Tetapi Anda benar-benar mencoba melakukan agregasi string dari hasil (yang mungkin, mungkin, benar-benar lebih dari dua nilai yang diekstraksi).

Anda dapat menggunakan XMLQuery alih-alih mengekstrak, dan menggunakan XPath string-join() fungsi untuk melakukan penggabungan:

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

Demo dengan tag simpul akhir XMl tetap:

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

Anda juga dapat mengekstrak semua <B> individu nilai menggunakan XMLTable, lalu gunakan agregasi tingkat 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

yang memberi Anda lebih banyak fleksibilitas dan memungkinkan pengelompokan berdasarkan nilai simpul lain dengan lebih mudah, tetapi tampaknya hal itu tidak diperlukan di sini berdasarkan nilai contoh Anda.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi ROUND(tanggal) di Oracle

  2. Memeriksa apakah suatu item tidak ada di tabel lain

  3. Bagaimana cara men-debug ORA-01775:rantai sinonim yang berulang?

  4. Cara mempercepat loading data dari oracle sql ke pandas df

  5. Menggunakan Oracle menggabungkan tiga tabel menjadi satu dengan PIVOT