2011-05-19 59 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功能