Я пытаюсь запросить таблицу, в которой один из столбцов содержит большой объем данных во вложенном XML. Я использовал функцию EXTRACTVALUE()
для отображения полей 1-к-1, но есть также ряд полей 1-ко-многим, которые требуют другого подхода.
После некоторого поиска я обнаружил функцию XMLTABLE()
, которая, кажется, подходит для этой цели, однако я получаю сообщение об ошибке несовместимых типов данных и не могу обойти его, даже если тип данных столбца - XMLTYPE.
Версия базы данных - Oracle Database 12c Enterprise Edition, выпуск 12.1.0.2.0 - 64 бита
Вот пример XML:
<QuoteData>
<DataCat1>
<ProductDistribution>
<Details>
<Name>Product1</Name>
<Amount>24</Amount>
<Price>100</Price>
</Details>
<Details>
<Name>Product2</Name>
<Amount>50</Amount>
<Price>200</Price>
</Details>
</ProductDistribution>
</DataCat1>
</QuoteData>
Мой запрос:
select
q.PROD_NAME,
q.PRICE
from DB_PROD_TBL r, xmltable('/QuoteData'
passing r.PROD_LINE_DATA
columns
PROD_NAME varchar2(50) path '/DataCat1/ProductDistribution/Details/Name',
PRICE number path '/DataCat1/ProductDistribution/Details/Price')q;