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

Bagaimana saya bisa mendapatkan nilai CDATA dari xml

Fungsi ekstrak sudah lama tidak digunakan lagi (setidaknya sejak 11gR2 - lihat catatan dalam dokumentasi itu).

Jika Anda memiliki beberapa nilai dan mungkin ingin melihat lebih dari satu, Anda dapat menggunakan XMLTable, yang menghilangkan gangguan CDATA (tetapi mungkin perlu dipangkas karena Anda memiliki spasi dalam nilai):

select x.stu_name, x.birthday,
  trim(stu_name) as stu_name2, to_char(x.birthday,'YYYY-MM-DD') as birthday2
from your_table t
cross join xmltable ('/RESPONSE/INFO' passing t.doc
  columns
    stu_name varchar2(30) path 'STU_NAME',
    birthday date path 'BIRTHDAY'
) x
where x.stu_name like '%M%'
STU_NAME BIRTHDAY  STU_NAME2 BIRTHDAY2
-------- --------- --------- ---------
 Maria   12-MAR-12 Maria     2012-03-12

Jika Anda menargetkan satu nilai, Anda juga dapat menggunakan xmlquery, yang lebih dekat dengan ekstrak Anda:

select regexp_replace(
  xmlquery('/RESPONSE/INFO[contains(BIRTHDAY, "2012-03-12")]/STU_NAME/text()'
    passing doc
    returning content),
  '<!\[CDATA\[ *(.*?) *\]\]>', '\1') as stu_name
from your_table t
STU_NAME
--------
Maria

Di sini saya telah mencari ulang tahun yang Anda inginkan sebagai teks dalam sebuah simpul, dan mendapatkan nama yang cocok; tetapi karena masih memiliki CDATA, kira-kira sama dengan yang Anda miliki. Jadi, saya telah menggunakan ekspresi reguler untuk menghapus bagian CDATA, meskipun Anda juga dapat menggunakan substr/instr jika kinerja menjadi perhatian.

db<>biola




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa cara termudah untuk membuat kolom READONLY di Oracle?

  2. Bagaimana cara menggunakan satu skema oleh banyak pengguna tanpa pra-memperbaiki nama skema sebelum objek?

  3. Bagaimana cara meningkatkan kinerja untuk INSERT massal ke tabel tertaut ODBC di Access?

  4. Oracle SQL PLS-00049:variabel pengikatan buruk

  5. SUBSTR() Fungsi di Oracle