使用java中的sqlldr

时间:2011-05-19 11:13:35

标签: java oracle named-pipes sql-loader

我有一个用于数据库导入的Java实用程序。我希望能够在oracle上使用sqlldr来提高性能。我可以创建controldata文件,但这似乎不是The Right Thing™。我应该能够通过在控制文件中提供INFILE "-"来流式传输数据( q1 - 如何?从命令行,我可以管道“echo <data...>”到sqlldr,但是必须有一种方法可以将字符串流式传输到进程的输入流中?之前从未使用过Java。我看不到如何流式传输控制文件本身( q2 - 或者我错过了一些明显的东西?)。我可以使用命名管道,但我不知道如何在Windows中实例化和使用Java( q3 - 这会起作用吗?如何?)。

<moan>为什么oracle必须如此复杂?它在mysql中是微不足道的...... <moan>

2 个答案:

答案 0 :(得分:1)

  

“为什么oracle必须如此复杂?它   在mysql“

中是微不足道的

您必须记住的是,Oracle是一种值得尊敬的产品。 SQL Loader作为一个实用程序必须是二十年,也许更多。因此,与一些较新的工具相比,它更难以使用。

这就是为什么你应该停止尝试将SQL Loader放入你的新奇Java应用程序中:-)看一下外部表。因为这些是数据库对象,所以我们可以对它们使用SQL SELECT,因此使用它们自动加载进程更容易。在我对另一个问题的回答中,我写了更多关于外部表的内容。 Check it out.

答案 1 :(得分:0)

基本上,SQLLDR是将一个或多个文件中的数据导入数据库表。它在该角色中功能强大,特别是在处理来自单个文件的多个文件或并行加载时(它可以同时从同一文件读取多个线程/进程)。

并非所有这些都适合阅读非真实文件。如果您的数据流来自Web服务,那么我将使用UTL_HTTP来提取它。如果它来自FTP,那么我将直接作为CLOB / BLOB直接进入数据库并从那里进行处理。

根据您的版本,还要查看外部表的preprocessor功能