如何将 Oracle 表导出为制表符分隔值?
我需要将数据库中的表导出到制表符分隔值文件。我在 Perl 和 SQLPlus 上使用 DBI。它是否支持(DBI 或 SQLPlus)从 TSV 文件导出和导入?
我可以编写代码来满足我的需要,但我想使用现成的解决方案(如果可用)。
I need to export a table in the database to a tab separated values file. I am using DBI on Perl and SQLPlus. Does it support (DBI or SQLPlus) exporting and importing to or from TSV files?
I can write a code to do my need, But I would like to use a ready made solution if it is available.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
将表转储到具有制表符分隔值的文件应该相对简单。
例如:
请注意,如果您的数据包含制表符或换行符,则此方法将无法正常工作。
It should be relatively simple to dump a table to a file with tab-separated values.
For example:
Note that this will not work well if your data contains either a tab or a newline.
根据您提供的信息,我猜测您正在使用 DBI 连接到 Oracle 实例(因为您提到了 sqlplus)。
如果您想要一个“现成的”解决方案,正如您所指出的,您最好的选择是使用“
yasql
”(又一个 SQLplus)一个用于 Oracle 的基于 DBD::Oracle 的数据库 shell。yasql 有一个巧妙的功能,您可以编写 sql select 语句并将输出直接从其 shell 重定向到 CSV 文件(您需要为此安装 Text::CSV_XS)。
另一方面,您可以使用 DBD::Oracle 和 < a href="http://search.cpan.org/perldoc?Text::CSV_XS" rel="nofollow noreferrer">Text::CSV_XS。准备并执行语句句柄后,您需要做的就是:
假设您已使用制表符作为记录分隔符初始化了 $csv。有关详细信息,请参阅 Text::CSV_XS 文档
From the information you have provided I am guessing you are using DBI to connect to an Oracle instance (since you mentioned sqlplus).
If you want a "ready made" solution as you have indicated, your best bet is to use "
yasql
" (Yet Another SQLplus) a DBD::Oracle based database shell for oracle.yasql has a neat feature that you can write an sql select statement and redirect the output to a CSV file directly from its shell (You need Text::CSV_XS) installed for that.
On the other hand you can roll your own script with DBD::Oracle and Text::CSV_XS. Once your statement handles are prepared and executed, all you need to do is:
Assuming you have initialised $csv with tab as record separator. See the Text::CSV_XS Documentation for details
这是仅使用 awk 和 sqlplus 的方法。您可以使用存储 awk 脚本或复制/粘贴 oneliner。它使用 HTML 输出模式,因此字段不会被破坏。
将此脚本存储为 sqlplus2tsv.awk:
没有使用长字符串和奇怪的字符对此进行测试,它适用于我的用例。有进取心的人可以将此技术应用于 Perl 包装器:)
Here's an approach with awk and sqlplus only. You can use store the awk script or copy/paste the oneliner. It uses the HTML output mode so that fields are not clobbered.
Store this script as sqlplus2tsv.awk:
Didn't test this with long strings and weird characters, it worked for my use case. An enterprising soul could adapt this technique to a perl wrapper :)
我过去不得不这样做...我有一个 perl 脚本,您可以传递您希望运行的查询并通过 sqlplus 进行管道传输。这是摘录:
当然,上面我正在将其分隔开...如果您想要制表符,您只需要 \t 而不是 |在印刷品中。
I have had to do that in the past... I have a perl script that you pass the query you wish to run and pipe that through sqlplus. Here is an excerpt:
Of course above I am making it pipe delimeted... if you want tabs you just need the \t instead of the | in the print.