我有一個表xml_documents
與兩列:document_id
列(主鍵)和xml
列與一些XML數據,這是一個無模式XMLType
。我可以創建一個物化視圖只用document_id
有:Oracle:如何創建一個從XMLType中提取數據的快速刷新物化視圖?
create materialized view mv refresh fast on commit as
select document_id
from xml_documents
這工作得很好,但也不是很有益的。如你所料,我希望物化視圖能夠從XML中提取數據,爲此我使用extractValue()
。我嘗試以下操作:
create materialized view mv refresh fast on commit as
select document_id, extractValue(xml, '/my/gaga') gaga
from xml_documents
這種失敗:
ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view
我應該如何去創造ON COMMIT物化視圖,從XML提取值的快速刷新?
哇,謝謝你這個驚人的答案。我認爲我們正在接近,但是當我運行'create materialized view ...'時,我得到一個'SQL錯誤:ORA-30625:NULL SELF參數的方法調度被禁止',我不知道如何解決它。你有什麼主意嗎? (原始表中的'xml'列被定義爲'xmltype not null',但這可能是不相關的。) – avernet 2011-04-09 06:05:53
您是如何創建表和物化視圖日誌的?下面是我使用的命令: 'create table xml_documents(document_id number primary key,xml xmltype not null);'''用主鍵創建物化視圖日誌xml_documents;'。這在10.2.0.1.0和11.2.0.1.0中適用於我。 – 2011-04-09 16:36:59
感謝您的跟進。我終於發現問題所在:'/ my/gaga'在一些行中不存在。所以我想'extract()'返回'null',因此應用'getStringVal()'導致錯誤,Oracle不允許我創建物化視圖。爲了解決這個問題,我修改了'extract_from_clob()'來測試以避免這個問題。我還添加了XPath表達式作爲參數,這使得它可以按原樣使用。 – avernet 2011-04-12 18:26:43