我正在處理我們獲得的xml消息。我必須讀取xml並將其存儲在4個不同的表中。XML到Oracle數據庫列映射
處理這個問題的最佳方法是什麼?可以說,如果xml架構發生了變化,那麼可能會添加新列或者可能刪除或重命名列等。
我們如何使這種鬆散耦合成爲可能。對XML或數據庫的任何更改都不需要更改代碼?
感謝,
我正在處理我們獲得的xml消息。我必須讀取xml並將其存儲在4個不同的表中。XML到Oracle數據庫列映射
處理這個問題的最佳方法是什麼?可以說,如果xml架構發生了變化,那麼可能會添加新列或者可能刪除或重命名列等。
我們如何使這種鬆散耦合成爲可能。對XML或數據庫的任何更改都不需要更改代碼?
感謝,
不知道你打算如何使用,一旦存儲在Oracle XML的,但如果只是存儲用於審計的目的,你可以在一個CLOB字段連同版本號和一些日期存儲XML。在單獨的參考表中,將xml版本號與其dtd(以及創建/修改的日期)相關聯。
我們從Tibco EMS讀取XML。然後首先將xml消息存儲在clob字段中。稍後我們檢索XML並解析它,並且必須從XML中提取值並存儲在4個不同的表中。 –
如果您正在使用Oracle 11g,您可以創建XMLTYPE變量PL/SQL程序 ,然後你可以使用提取物()函數來 只檢索你想成爲領域的XML文檔的部分。
聲明一個類型爲XMLTYPE的PL/SQL變量, 使用XMLTYPE.CREATEXML()函數創建一個XMLTYPE變量。
V_INPUT_XML := XMLTYPE.CREATEXML(V_TAB.INPUT_MESSAGE);
萃取()PL/SQL函數返回一個XMLTYPE和我有 使用getclobval()來的XMLTYPE轉換爲VARCHAR。
--V_OUTPUT_XML is set by a result of the extract() function
--on an XMLTYPE
V_OUTPUT_STR := v_output_xml.getclobval();
至少有了這個,你只需要改變你的PL/SQL如果 路徑你設置變化等領域;更改 XML文檔以外的字段(只要它們不影響XPATH的 )不應該要求更改到 PL/SQL ..
@A B目前我們的數據庫是10g。規劃11g,但不知道什麼時候會發生。我們計劃使用C#(LINQ to XML)解析,而不是使用Oracle XML功能。 –
如何使用xml之後存儲在數據庫?僅用於審計目的?你真的解析XML和商店關係? – tbone
@tbone。我們從Tibco EMS讀取XML。然後首先將xml消息存儲在clob字段中。稍後我們檢索XML並解析它,並且必須從XML中提取值並存儲在4個不同的表中。 –
我們計劃使用數據庫列名和表名進行XPath映射。但是在C#中,我們如何才能實現可擴展性,以便將來對XML或數據庫的更改不需要更改代碼。而且在將來我們可能需要解析不同的XML,即來自其他XML提供者。我們可能會從多個提供程序中獲取不同模式的XML。 –