Я новичок в Oracle, и у меня есть следующая проблема с извлечением определенного поля из XML-документа, который находится внутри поля CLOG таблицы в БД.
Итак, в моем XML у меня есть эта структура:
<?xml version="1.0" encoding="UTF-8"?>
<in:Invoice xmlns:in="urn:oasis:.....">
<cac:AccountingSupplierParty>
<cac:Party>
.............................
.............................
/* FIRST cac:PartyLegalEntity that contains a cbc:CompanyID element */
<cac:PartyLegalEntity>
<cbc:CompanyID>VALUE-1</cbc:CompanyID>
.............................
.............................
</cac:RegistrationAddress>
</cac:PartyLegalEntity>
/* SECOND cac:PartyLegalEntity that contains a cbc:CompanyID element */
<cac:PartyLegalEntity>
<cbc:CompanyID>VALUE-2</cbc:CompanyID>
.............................
.............................
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingSupplierParty>
</in:Invoice>
Итак, теперь в запросе я должен получить строковое значение, содержащееся в элементе cbc:CompanyID внутри элемента SECOND cac:PartyLegalEntity (VALUE-2< /сильное> значение).
Я сделал таким образом:
xmltype (d.documento).EXTRACT (
'//cac:AccountingSupplierParty//cac:PartyLegalEntity/cbc:CompanyID/text()')
.getStringVal() AS PIVA_MITTENTE
Но, делая таким образом, результатом моего запроса является строка со столбцом PIVA_MITTENTE, которая содержит значение VALUE-1VALUE-2 вместо VALUE-2. strong> именно этого я и хочу.
Я думаю, проблема в том, что тег контейнера () одинаков как для тега (имеющего одинаковое имя), так и в этот тег я извлекаю значение одного и того же тег .
Я не могу изменить XML, поэтому могу ли я каким-то образом указать, что мне нужно значение тега , которое находится внутри тега SECOND, в мой XML? Как я могу это сделать и решить эту проблему?
ИЗМЕНИТЬ 1:
Мой исходный запрос таков:
SELECT
xmltype (d.documento).EXTRACT (
'//cac:AccountingSupplierParty//cac:PartyLegalEntity/cac:RegistrationAddress/cbc:PostalZone/text()')
.getStringVal() AS CAP_MITTENTE,
xmltype (d.documento).EXTRACT (
'//cac:AccountingSupplierParty//cac:PartyLegalEntity/cbc:CompanyID/text()')
.getStringVal() AS PIVA_MITTENTE
FROM coda_tx c, documenti_tx d
WHERE C.FK_TIPO_DOC = 99
AND C.FK_STATO = 1
AND C.FK_PIVA_MITTENTE = '11111111'
AND C.PK_CODA = D.PFK_CODA
AND C.CANALE='STA';
Второй xmltype (d.documento).EXTRACT — это тот, который дает мне описанную проблему.
Как я могу интегрировать использование XMLTABLE в мой предыдущий запрос?