问题描述
嗨,
我想创建SQL来获取表的所有记录,并将它们块起来写入平面文件。
假设以一个例子为例,如果表内容2000记录,则写入sql以获取所有记录并将1000记录写入一个平面文件中,其他1000记录写入另一个平面文件中。
我是Oracle的新手。如果有人帮我,我很感激。
我想创建SQL来获取表的所有记录,并将它们块起来写入平面文件。
假设以一个例子为例,如果表内容2000记录,则写入sql以获取所有记录并将1000记录写入一个平面文件中,其他1000记录写入另一个平面文件中。
我是Oracle的新手。如果有人帮我,我很感激。
专家解答
如果这是将数据下载到您的计算机的一次性过程,那么我会使用SQL Developer或SQLcl。
这使您能够通过在SQL查询中放置注释来以给定格式 (csv,json,xml,...) 输出数据。然后,您可以使用前N个查询一次对结果1000行进行假脱机:
显然,您可以编写一个脚本,调用上述传递参数的文件名和开始/结束。
您可以在以下位置阅读有关格式化输出的更多信息:
http://www.thatjeffsmith.com/archive/2012/05/formatting-query-results-to-csv-in-oracle-sql-developer/
和前N个查询:
http://www.oracle.com/technetwork/issue-archive/2007/07-jan/o17asktom-093877.html
或者在12c上,您可以使用fetch first语法:
http://www.oracle.com/technetwork/issue-archive/2013/13-sep/o53asktom-1999186.html
如果这将是一个重复的过程和/或您想将文件写入数据库服务器,我会创建一个PL/SQL过程:
-批量收集一次1,000行的数据
-每次使用utl_file将其写入新文件
例如:
您可以在以下位置找到使用UTL_file的示例:
https://oracle-base.com/articles/9i/generating-csv-files#custom-plsql
这使您能够通过在SQL查询中放置注释来以给定格式 (csv,json,xml,...) 输出数据。然后,您可以使用前N个查询一次对结果1000行进行假脱机:
exec :st := 1; exec :en := 1000; spool file_1.txt select /*csv*/* from ( select t.*, row_number() over (order by ...) rn from t ) where rn between :st and :en; spool off exec :st := 1001; exec :en := 2000; spool file_2.txt select /*csv*/* from ( select t.*, row_number() over (order by ...) rn from t ) where rn between :st and :en; spool off ...复制
显然,您可以编写一个脚本,调用上述传递参数的文件名和开始/结束。
您可以在以下位置阅读有关格式化输出的更多信息:
http://www.thatjeffsmith.com/archive/2012/05/formatting-query-results-to-csv-in-oracle-sql-developer/
和前N个查询:
http://www.oracle.com/technetwork/issue-archive/2007/07-jan/o17asktom-093877.html
或者在12c上,您可以使用fetch first语法:
http://www.oracle.com/technetwork/issue-archive/2013/13-sep/o53asktom-1999186.html
如果这将是一个重复的过程和/或您想将文件写入数据库服务器,我会创建一个PL/SQL过程:
-批量收集一次1,000行的数据
-每次使用utl_file将其写入新文件
例如:
declare cursor cur is select ... from ... order by ...; type tp is table of cur%rowtype index by binary_integer; arr tp; begin open cur; loop fetch cur bulk collect into arr limit 1000; ... process to write file ... exit when arr.count = 0; close cur; end; /复制
您可以在以下位置找到使用UTL_file的示例:
https://oracle-base.com/articles/9i/generating-csv-files#custom-plsql
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
656次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
626次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
531次阅读
2025-04-20 10:07:02
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
480次阅读
2025-04-22 00:20:37
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
476次阅读
2025-04-17 17:02:24
一页概览:Oracle GoldenGate
甲骨文云技术
460次阅读
2025-04-30 12:17:56
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
450次阅读
2025-04-22 00:13:51
火焰图--分析复杂SQL执行计划的利器
听见风的声音
405次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
369次阅读
2025-04-15 14:48:05
OR+DBLINK的关联SQL优化思路
布衣
345次阅读
2025-05-05 19:28:36