Я пытаюсь создать материализованное представление, которое будет представлять в виде таблицы данные XML, содержащиеся в таблице. Я также надеюсь использовать опцию автоматического обновления, чтобы обеспечить постоянную актуальность MV.
Некоторый фон:
Oracle 10.2
Таблица определений:
CREATE TABLE AGREEMENTEXTENSIONDATA (
AGREEMENTEXTENSIONDATAID NUMBER(18) NOT NULL,
EXTENSIONDATA NCLOB,
AGREEMENTID NUMBER(18) NOT NULL)
пример расширения данных:
<Extensions>
<ExtensionData id="2" name="IncludePortfolio" type="4">true</ExtensionData>
</Extensions>
Я создал журнал на столе:
CREATE MATERIALIZED VIEW LOG ON AGREEMENTEXTENSIONDATA
NOCACHE
LOGGING
NOPARALLEL
WITH PRIMARY KEY
INCLUDING NEW VALUES;
Затем я пытаюсь создать следующий MV:
CREATE MATERIALIZED VIEW MV_ExtAgreements
REFRESH FAST ON COMMIT
ENABLE QUERY REWRITE
as
select AGREEMENTEXTENSIONDATAID,
agreementid,
extractvalue(xmltype(EXTENSIONDATA), '/Extensions/ExtensionData[@id=''1'']')
from agreementextensiondata
/
Но получите следующее сообщение:
ORA-30373: object data types are not supported in this context
Я видел другой пост, предлагающий использовать функцию для извлечения значений из XML, но это тоже не работает:
create or replace function extractVARCHAR2Extension(p_xml in clob, in_number in VARCHAR2)
return varchar2 deterministic
is
begin
return xmltype(p_xml).extract('/Extensions/ExtensionData[@id=''' || in_number || ''']/text()').getstringval();
end;
/
но следующее утверждение не выполняется:
select extractVARCHAR2Extension(extensiondata,'2')
from agreementextensiondata
where agreementid = 136
ORA-00600: internal error code, arguments: [kghsccread1], [128], [0], [], [], [], [], []
ORA-06512: at "SYS.XMLTYPE", line 254
ORA-06512: at "ALGOV5.EXTRACTVARCHAR2EXTENSION", line 5
??
Любое руководство приветствуется, возможно, здесь используется неправильный набор инструментов.
спасибо