У меня есть таблица с CLOB, содержащая данные xml, которые могут выглядеть следующим образом:
CREATE TABLE buildings (
id NUMBER,
xml_data CLOB
);
Я хочу извлечь некоторые значения xml (кратные значения в одной строке).
XML может выглядеть следующим образом
<?xml version="1.0" encoding="UTF-8"?>
<Event xmlns="myself.com/event">
<Warehouse whNo="100">
<Buildings>
<Building>Owned</Building>
<Building>Owned</Building>
</Buildings>
</Warehouse>
</Event>
Я использую запрос XMLTable, например, такой:
Insert into final_table
*
from
SELECT
w.id,
x.building
FROM buildings w
CROSS JOIN xmltable (XMLNAMESPACES ( 'myself.com/event' AS "e" ),
'/e:Warehouse/e:Buildings/e:Building'
PASSING w.xml_data
COLUMNS building VARCHAR2(30) PATH '.'
) x;
Этот запрос работает нормально, но проблема в том, что фактический xml намного больше похож на32 Кбайт и количество строк в миллионах. Я также извлекаю больше значений.
С этим типом запроса в добавлении nologging я получаю время обработки более пяти часов. Я искал лучшие способы через Интернет, и единственное, что я сейчас нашел, это dbms_xmlstore , который, как говорили, имел лучшую производительность , но похоже, что он сделан только для того, чтобы есть файлы илиодин большой CLOB, а у меня миллионы. Это должно быть зациклено? Оттуда я не уверен, что производительность увеличится, плюс, Мне нужно сохранить идентификатор первого столбца, связанный с xml.
Могу ли я упустить некоторые детали, которые потребляют большересурсов, чем разбирать сам? Я понимаю, что пишу вопрос о том, что оракул должен прекрасно обрабатывать размеры, намного превышающие этот.
Есть идея получше?
Есть ли способ с SQLLoader? Так как я создаю первыйтаблица из CSV-файла, где одним из полей является xml.