2011-05-19 62 views
0

我有一個用於數據庫導入的Java實用程序。我希望能夠在oracle上使用sqlldr來提高性能。我可以創建controldata文件,但這看起來並不像The Right Thing™那樣。我應該能夠通過在控制文件中提供INFILE "-"來流式傳輸數據(q1 - 如何從命令行輸入「echo <data...>」到sqlldr,但是必須有一種方法可以將字符串串流到輸入流爲流程?以前從未使用過Java)。我看不到如何流式傳輸控制文件本身(q2 - 或者我錯過了明顯的東西?)。我可以使用命名管道,但我不知道如何在Windows中實例化和使用它們(q3 - 這是否會工作以及如何?)。使用來自java的sqlldr

<moan>爲什麼oracle必須如此複雜?它在MySQL微不足道... <moan>

回答

1

「爲什麼一定是甲骨文如此複雜?這 在MySQL微不足道」

那你必須記住的是,Oracle是一個古老的產品。作爲實用程序的SQL Loader必須是二十歲,也許更多。所以自然而然,比一些更新的工具更難以使用。

這就是爲什麼你應該停止嘗試將SQL Loader安裝到你新的Java應用程序中:-)而是看看外部表。因爲這些是數據庫對象,所以我們可以使用SQL SELECT來對付它們,所以使用它們自動完成加載過程更容易。我在回答另一個問題時寫了一些關於外部表格的信息。 Check it out.

0

基本上,SQLLDR是關於從一個或多個文件獲取數據到數據庫表中。它在這個角色中很強大,特別是在處理來自單個文件的多個文件或並行加載時(它可以同時從同一文件讀取多個線程/進程)。

並非所有這些都適合從不是真實文件的東西中讀取。如果您的數據流來自Web服務,那麼我會使用UTL_HTTP進行抽取。如果它來自FTP,那麼我會將FTP作爲CLOB/BLOB直接導入到數據庫中並從那裏進行處理。

根據您的版本,還可以看看外部表的preprocessor功能