Plsql 关于如何从oracle10g中提取600万条记录,有什么建议吗?

Plsql 关于如何从oracle10g中提取600万条记录,有什么建议吗?,plsql,oracle10g,cursor,Plsql,Oracle10g,Cursor,我只想给你一点背景知识 需要编写一个PL-SQL,它将提取连接不同表的600万条记录,并创建该记录的文件。 需要更多建议,特别是关于如何获取这些记录的建议。因为一次性获取这数百万条记录可能是一项资源密集型工作。所以问题是如何获取这些记录? 任何pl sql都将受到高度赞赏。您需要提取单个表的内容还是一个联接结果?结果是否需要排序?如果是这样,您应该首先优化提取查询 获得最佳查询后,您可以直接选择(例如通过sqlplus),或写入外部平面文件表,或使用ODI 600万行也不是那么多。只需编写查询并

我只想给你一点背景知识

需要编写一个PL-SQL,它将提取连接不同表的600万条记录,并创建该记录的文件。 需要更多建议,特别是关于如何获取这些记录的建议。因为一次性获取这数百万条记录可能是一项资源密集型工作。所以问题是如何获取这些记录?
任何pl sql都将受到高度赞赏。

您需要提取单个表的内容还是一个联接结果?结果是否需要排序?如果是这样,您应该首先优化提取查询

获得最佳查询后,您可以直接选择(例如通过sqlplus),或写入外部平面文件表,或使用ODI


600万行也不是那么多。只需编写查询并让优化器完成它的工作。如果您的统计数据是最新的,这也是自动的,那么它应该可以正常运行。尝试调整可能会使其运行较慢,除非您比Oracle的工程师团队对查询优化有更好的理解

如果所有行都足够小,那么只使用PL/SQL是可以的。UTL_文件包将使用PUT_line命令将每行限制为32767个字符。有一种方法可以解决这个问题,但它需要将数据复制到BLOB

我建议安装Python和cx_Oracle或Perl和DBD::Oracle。他们将很乐意毫无问题地翻滚600万行。默认设置为拉取大小合适的一批行,以降低网络传输


如果您想让我知道如何继续,我可以发布一些示例代码,但通过谷歌搜索cx_Oracle或DBD::Oracle的文档,可以找到如何获取记录的基础知识。

我编写了Java程序将所有记录写入文件。在我的选择,我有20个线程,它就像一个梦想

也可以考虑java存储过程,并使用标准的JavaIO类来编写文件。不过,您需要授予适当的Java权限才能写入文件系统。欢迎使用堆栈溢出!这也许应该是一个评论,而不是一个答案,因为它几乎只是说,你设法让这个工作没有提供太多的细节。你是如何测试你的方法的资源意图的?你为什么考虑改变最初的方法?