In Oracle 12 zou u het volgende moeten kunnen doen:
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 );
(Niet getest omdat ik de komende uren op 11g zit)
Op 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 )
Of (als de JSON-tekenreeks niet in een andere tak van de XML voorkomt) kunt u gewoon het volgende gebruiken:
SELECT REGEXP_SUBSTR(
your_xml_column,
'"tenantId":"((\\"|[^"])*)"',
1,
1,
NULL,
1
) AS tenantId
FROM your_table