我不知道問這個問題的最佳方式,但讓我解釋一下這個問題,這可能會有所幫助。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(通常每年一次)。
我不認爲這真的是我想要實現的。對於我想加載的每個表,我將要有一個新的XML文件。 我擔心的一件事是卷,在一天中我將處理大約80,000條記錄,大約30萬條繁重的日子。 – diagonalbatman 2011-03-14 14:00:53
那麼一個XML文件與一個關係表一對一對應呢?如果是這樣,你甚至會更幸運,因爲你可以做一個「INSERT ... SELECT ... FROM XMLTABLE(...)」。還是我仍然想念一些東西?對於那些卷,你一定要看看一個單一的SQL語句,而不是做PL/SQL處理... – 2011-03-14 14:13:37
這就是正確的,我認爲我的問題更多 - 如何將源數據(從Windows)在第一個實例的數據庫(UNIX)....除非我可以做到這一點使用從Windows窗口運行SQL? – diagonalbatman 2011-03-14 14:18:08