Использование ExtractValue и XMLType в представлении MAterialized - PullRequest
1 голос
/ 21 июля 2011

Я пытаюсь создать материализованное представление, которое будет представлять в виде таблицы данные 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

??

Любое руководство приветствуется, возможно, здесь используется неправильный набор инструментов.

спасибо

1 Ответ

0 голосов
/ 22 июля 2011

Изменить p_xml in clob на p_xml in Nclob.

...