Ну, одна проблема в том, что ваши строки недопустимы XML - им нужен один root узел, содержащий остальную часть строки. Неважно, какое имя вы даете узлу root. Я не уверен, какая у вас версия Oracle, но в 12 c xmltype()
произойдет сбой с LPX-00245: extra data after end of document
, если нет узла root.
Тем не менее, все, что вам нужно изменить XPath, например, на /raceHistory[last()]/raceDate
, чтобы получить последнюю запись raceHistory.
Вот пример, где я добавил root узел к вашему xml:
with test1 as (select 2 as id1, '<root><raceHistory><raceDate>1997-06-21</raceDate><raceType>MARATHON</raceType></raceHistory><raceHistory><raceDate>2017-01-01</raceDate><raceType>SKATE</raceType></raceHistory></root>' as col1 from dual)
SELECT
EXTRACTVALUE(xmltype(col1), '/root/raceHistory[last()]/raceDate') as raceDate,
EXTRACTVALUE(xmltype(col1), '/root/raceHistory[last()]/raceType') as raceType
FROM TEST1
WHERE id1 = 2;
Примечание что это не получит запись raceHistory с последним raceDate - это было бы более сложно. Он просто получает последнюю запись raceHistory в строке. В вашем случае они уже отсортированы таким образом; Я просто хотел уточнить это.