Аз съм доста нов в Oracle и имам следния проблем с извличането на конкретно поле от XML документ, който е вътре в CLOG поле на таблица в DB.
И така, в моя 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< /strong> стойност).
Направих по този начин:
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 в предишната си заявка?