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

Jak parsować dane w CDATA w Oracle?

W Oracle 12 powinieneś być w stanie zrobić:

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

(Nie testowano, ponieważ przez następne kilka godzin używam 11g)

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

Lub (jeśli ciąg JSON nie pojawi się w innej gałęzi XML), możesz po prostu użyć:

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. python oracle wstaw niezgodność typu danych

  2. Talend etl błąd oracle 0 wstaw wiersz

  3. Odbierz przywileje w Oracle

  4. skonfiguruj php z Oracle

  5. Mam wyzwalacz autonomiczny, ale wykonuję tylko jeden raz w tej samej sesji