2012-01-25 53 views
3

我有一個需求,即需要從Java程序的平面文件中對錶格進行批量更新。批量更新Oracle中的表格

該平面文件將包含數千個逗號分隔值條目。因此,如果在表中找到平面文件中的條目,我應該更新該行,否則我需要將其插入另一個表中。所以我寫了一個相同的功能。但我的問題是一次性更新平面文件中所有條目的表格。

我遇到了使用SQL加載器的批量插入,但不能用於更新表。

我也使用了JDBC批量更新,但問題是存儲過程/函數outinout參數無法批量處理。

任何人都可以建議是否有辦法做到這一點?

+0

是您的要求真的要更新一個表並插入另一個?或者是一個錯字? – APC

+0

是的。如果條件匹配,我需要更新表,如果不是,我需要將數據插入到另一個表中。 – kartshan

回答

0

谷歌GORM更多參與,但你會寫更少的代碼。

6

我會使用一個external table(引用文件作爲表),然後使用merge命令(即讓你做upserts命令)來更新/插入我的表

+0

您好,非常感謝您的回覆。我嘗試了教程中給出的同樣的例子。第一次,我得到了一些oracle異常,例如「ORA-29913:執行ODCIEXTTABLEFETCH標註時出錯」。因此,同時給出了寫入和讀取權限我創建的目錄。那時我能夠讀取數據。然後我改變了輸入文件中的數據,並且再次收到與上面相同的錯誤消息「ORA-30653:已達到拒絕限制」。那麼它只會在輸入文件沒有改變時才起作用? – kartshan

+0

外部表與sqlloader類似,您可以更改數據,但對於結構中的更改,您需要使用不同的描述 - 在本例中爲另一個外部表。 –

+0

感謝您的回覆。這是因爲我在數據文件中輸入了錯誤的數據格式。但是現在我面臨着一個關於數據文件中行數的問題。如果數據文件中有超過61000個條目,我無法將數據檢索到過程中的遊標中,甚至無法執行選擇查詢來計算行數。它引發以下錯誤 – kartshan