Подскажите пожалуйста, как извлечь поле guid из этого XML? Проблема в наличии параметров xmlns. В настоящее время возвращается пустым.
with XML_text(col) as
(
select
'<?xml version = "1.0" encoding = "UTF-8"?>
<purchasePlan
xmlns:ns2 = "http://zakupki.gov.ru/223fz/purchasePlan/1"
xmlns = "http://zakupki.gov.ru/223fz/types/1"
xmlns:ns10 = "http://zakupki.gov.ru/223fz/decisionSuspension/1"
xmlns:ns11 = "http://zakupki.gov.ru/223fz/disagreementProtocol/1"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "https://zakupki.gov.ru/223/integration/schema/TFF-13.1 https://zakupki.gov.ru/223/integration/schema/TFF-13.1/purchasePlan.xsd">
<body>
<item>
<guid>096c4bf6-d656-4441-9032-0b7c45423af1</guid>
</item>
</body>
</purchasePlan>'::xml
)
SELECT r.guid
FROM XML_text as x,
XMLTABLE('purchasePlan/body/item' passing x.col
COLUMNS guid varchar(50) path './guid'
) as r
;
Результат должен быть «096c4bf6-d656-4441-9032-0b7c45423af1».





Ваш XML имеет пространство имен по умолчанию. Все элементы XML привязаны к нему, даже если мы не видим этого явно. Его необходимо объявить с помощью предложения xmlnamespaces(...) и использовать в выражениях XPath.
SQL
with XML_text(col) as
(
select
'<?xml version = "1.0" encoding = "UTF-8"?>
<purchasePlan xmlns:ns2 = "http://zakupki.gov.ru/223fz/purchasePlan/1"
xmlns = "http://zakupki.gov.ru/223fz/types/1"
xmlns:ns10 = "http://zakupki.gov.ru/223fz/decisionSuspension/1"
xmlns:ns11 = "http://zakupki.gov.ru/223fz/disagreementProtocol/1"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "https://zakupki.gov.ru/223/integration/schema/TFF-13.1 https://zakupki.gov.ru/223/integration/schema/TFF-13.1/purchasePlan.xsd">
<body>
<item>
<guid>096c4bf6-d656-4441-9032-0b7c45423af1</guid>
</item>
</body>
</purchasePlan>'::xml
)
SELECT r.guid
FROM XML_text as x,
XMLTABLE(xmlnamespaces('http://zakupki.gov.ru/223fz/types/1' AS "ns1"),
'/ns1:purchasePlan/ns1:body/ns1:item'
PASSING x.col
COLUMNS guid varchar(50) path 'ns1:guid'
) as r
;