2011-03-14 64 views
1

我不知道問這個問題的最佳方式,但讓我解釋一下這個問題,這可能會有所幫助。Oracle PL/SQL來加載XML

我們目前擁有使用Oracle OAI中心分發給我們的數據源。數據通過DBLinks提供給我們。

信息提供商將升級到Oracle ODI,並且由於多種原因,強制所有數據傳輸均使用SFTP上的加密XML文件進行。

現在這爲我們自己作爲數據接收者引入了一個新問題,因爲我們現在需要修改我們的系統以將XML數據加載到曾由DBLinks填充的表中。

的設立,我們目前擁有的是:

  • 的Oracle 10g(10.2.0.4)
    • 甲骨文在Unix(HP-UX)
  • 許多WIN2K3服務器運行控制接口/ ETL流程。

因此,目前OAI中心會將數據放入我們ETL層的許多表中。例如說「PERSON」。這張表我不認爲是相關的結構...

當數據已被加載到PERSON表中時,OAI傳送將傳送文件結束標記到數據庫,這存儲在表「 EOF「 - 它包含」PERSON「中預計的收錄記錄數。

Windows服務器有一個批處理過程,每30秒輪詢一次,這將檢查EOF記錄是否存在,如果存在,那麼它會啓動我們的ETL處理。

如果可能的話,我想避免更改系統的這一部分,所以我建議作爲一個解決方案是解析新的XML文件並將它們加載到Oracle數據庫中,問題是什麼是最好的方法這樣的:

  • 的XML文件將被傳遞到Windows服務器
  • 偏好是使用PL/SQL加載數據

什麼是加載數據到的最佳方式Oracle(Unix)數據庫,源數據位於Wind ows邊。

如果可能的話,我想避免使用任何Unix腳本 - 因爲我的開發團隊沒有足夠的Unix經驗讓他們鬆懈。

任何建議將不勝感激。

的XML格式如下 - 和元素名稱映射到列名於DB:

<PERSON> 
    <HEADER> 
    <Creator>~</Creator> 
    <DigitalSigniture>~</DigitalSigniture> 
    <Owner>~</Owner> 
    <Title>~</Title> 
    <Marking>~</Marking> 
    </HEADER> 

    <PERSONS> 
    <EMPLOYEE_NUMBER>~</EMPLOYEE_NUMBER> 
    <FIRST_NAME>~</FIRST_NAME> 
    <LAST_NAME>~</LAST_NAME> 
    ...... 
    </PERSONS> 
<PERSON> 

編輯: 我也有意識的卷,在正常(平均)一天,我會處理有關80,000個XML記錄,在特殊的日子裏,我將處理多達300,000(通常每年一次)。

回答

2

切碎你的XML並將它們加載到Oracle的表,你可以用我在我這篇文章所描述的技術:http://rwijk.blogspot.com/2010/03/shredding-xml-into-multiple-tables-in.html

問候,
羅布。

加載文件的某些鏈接: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14259/xdb25loa.htm#ADXDB2900
http://www.oracle-developer.net/display.php?id=416

+0

我不認爲這真的是我想要實現的。對於我想加載的每個表,我將要有一個新的XML文件。 我擔心的一件事是卷,在一天中我將處理大約80,000條記錄,大約30萬條繁重的日子。 – diagonalbatman 2011-03-14 14:00:53

+0

那麼一個XML文件與一個關係表一對一對應呢?如果是這樣,你甚至會更幸運,因爲你可以做一個「INSERT ... SELECT ... FROM XMLTABLE(...)」。還是我仍然想念一些東西?對於那些卷,你一定要看看一個單一的SQL語句,而不是做PL/SQL處理... – 2011-03-14 14:13:37

+0

這就是正確的,我認爲我的問題更多 - 如何將源數據(從Windows)在第一個實例的數據庫(UNIX)....除非我可以做到這一點使用從Windows窗口運行SQL? – diagonalbatman 2011-03-14 14:18:08

0

我會提供給忘記集結在Oracle XML功能和使用任何正常的語言來處理的「客戶端」的XML文件,並提交準備將數據用於數據庫。 (查找Python或.NET)

如果您允許從網絡訪問數據庫服務器文件系統,則可能存在安全風險。

每天80,000條記錄對Oracle來說不應該是一個大問題。我們做得更接近實時。

+2

這也是可能的,但是由於他有一個具有PL/SQL技能的開發團隊,我認爲使用Oracle XML特性對他們來說是最熟悉的。順便說一句,我喜歡你的「任何正常語言」的短語,儘管:-) – 2011-03-14 14:18:36

+0

這是我在想什麼,我有一些Java開發人員在我的處置,.NET是一個問題,由於我工作的限制性環境上。 – diagonalbatman 2011-03-14 14:19:07

+0

我正在開發相當大的系統,我們在公司內部使用。大部分業務邏輯都在PL/SQL代碼中。所以我可以說,我是PL/SQL開發人員。同時,所有前端和數據導入都是vb.net(主要優點是它與Excel很好地集成,我們用數據中的「瀏覽器」),我會推薦Python來處理數據。簡單的語言,使用SQL查詢非常簡單。我做了一個簡單的測試:將相當多的數據上傳到數據庫。結果比使用.NET的「標準」方式好得多。 – 2011-03-18 00:19:11

0

如果您必須根據許多行業數據標準之一解析大量XML文件或非常複雜的XML文件,例如, NDC,XBRL,FPML,ISO20022等。您最好的選擇是使用專門的工具來完成這項工作。 Flexter Data Liberator可以自動化parsing XML into Oracle的整個過程,無需編寫一行代碼