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