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

Cách phân tích cú pháp dữ liệu bên trong CDATA trong oracle

Trong Oracle 12, bạn có thể thực hiện:

SELECT tenantId
FROM   your_table t
       LEFT OUTER JOIN
       XMLTABLE(
         '/PayLoad/.'
         PASSING XMLTYPE( t.your_xml_column )
         COLUMNS cdata CLOB PATH '.'
       ) x
       ON ( 1 = 1 )
       LEFT OUTER JOIN
       JSON_TABLE(
         x.cdata,
         '$'
         COLUMNS ( tenantId VARCHAR2(10) PATH '$.order.tenantId' )
       ) j
       ON ( 1 = 1 );

(Chưa được kiểm tra vì tôi vào 11g trong vài giờ tới)

Trên Oracle 11:

SELECT REGEXP_SUBSTR( x.cdata, '"tenantId":"((\\"|[^"])*)"', 1, 1, NULL, 1 ) AS tenantId
FROM   your_table t
       LEFT OUTER JOIN
       XMLTABLE(
         '/PayLoad/.'
         PASSING XMLTYPE( t.your_xml_column )
         COLUMNS cdata CLOB PATH '.'
       ) x
       ON ( 1 = 1 )

Hoặc (nếu chuỗi JSON không xuất hiện trong một nhánh khác của XML), bạn chỉ có thể sử dụng:

SELECT REGEXP_SUBSTR(
         your_xml_column,
         '"tenantId":"((\\"|[^"])*)"',
         1,
         1,
         NULL,
         1
       ) AS tenantId
FROM   your_table


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuỗi dài trong N-Hibernate với Oracle gây ra lỗi

  2. Cách xóa hàng đợi trong Oracle AQ

  3. EntityFramework Code First Oracle

  4. Làm thế nào để thực thi một thủ tục được lưu trữ trong một phiên khác trong cùng một thời điểm trong pl / sql

  5. Làm thế nào bạn có thể biết nếu một Gói, Thủ tục hoặc Hàm PL / SQL đang được sử dụng?