Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Nối các nút XMLType trong truy vấn Oracle

concat() Hàm SQL nối hai giá trị, vì vậy nó chỉ thêm dấu chấm phẩy vào từng giá trị được trích xuất một cách độc lập. Nhưng bạn thực sự đang cố gắng tổng hợp chuỗi các kết quả (có thể, có lẽ, thực sự là nhiều hơn hai giá trị được trích xuất).

Bạn có thể sử dụng XMLQuery thay vì giải nén và sử dụng XPath string-join() chức năng để thực hiện sự kết hợp:

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

Bản trình diễn với các thẻ nút cuối XMl cố định:

-- 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ạn cũng có thể trích xuất tất cả <B> riêng lẻ các giá trị bằng cách sử dụng XMLTable, và sau đó sử dụng tổng hợp mức 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

điều này mang lại cho bạn sự linh hoạt hơn và sẽ cho phép nhóm theo các giá trị nút khác dễ dàng hơn, nhưng điều đó dường như không cần thiết ở đây dựa trên giá trị mẫu của bạn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 cách tạo bảng nếu nó chưa tồn tại trong Oracle

  2. Kết nối bên trong SQL trên các câu lệnh chọn

  3. Làm cách nào để chỉ trích xuất giá trị ngày tháng từ trường ngày tháng trong Oracle?

  4. Tìm hiểu về Gói DBMS_OUTPUT trong Oracle

  5. Bế tắc trong Oracle