In Oracle 12 sollten Sie in der Lage sein:
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 );
(Nicht getestet, da ich die nächsten Stunden auf 11g bin)
Auf 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 )
Oder (wenn die JSON-Zeichenfolge nicht in einem anderen XML-Zweig vorkommt) können Sie einfach Folgendes verwenden:
SELECT REGEXP_SUBSTR(
your_xml_column,
'"tenantId":"((\\"|[^"])*)"',
1,
1,
NULL,
1
) AS tenantId
FROM your_table