Ваш XMLType (вероятно) хранится как CLOB. Найдите скрытый столбец с запросом, подобным следующему:
select * from user_tab_cols where table_name = 'XML_DOCUMENTS';
Затем создайте функцию для преобразования CLOB в XMLType и извлеките значение. Обратите внимание, что ключевое слово «детерминированное» необходимо, хотя
Я не уверен почему. Передача данных назад и вперед между SQL и PL / SQL будет медленной, но если вы используете материализованное представление, то, вероятно,
уже медленно.
create or replace function extract_from_clob(p_xml in clob) return varchar2 deterministic
is
begin
return XMLType(p_xml).extract('/my/gaga/text()').getStringVal();
end;
/
Затем перетащите и создайте материализованное представление с системным столбцом, переданным в функцию:
create materialized view mv refresh fast on commit as
select document_id, extract_from_clob(SYS_NC00003$) gaga
from xml_documents;
Я не уверен в использовании сгенерированного системой скрытого столбца. Это работает, но не кажется хорошей идеей. По крайней мере, это будет сделано
Трудно создать объект в разных системах - вам нужно будет каждый раз находить новое имя столбца.
Кажется странным, что XMLTypes не работают, когда большие объекты работают нормально. Я не могу найти документацию по этому поводу; Я не уверен, является ли это ошибкой, нереализованной функцией, или есть какая-то волшебная настройка, которая заставит это работать. Если никто не может дать лучший ответ, возможно, стоит обратиться в службу поддержки Oracle, прежде чем использовать вышеуказанный подход.