如何将Oracle数据库表卸载到csv文件中?


18

我需要从Oracle 11g第1版数据库中检索某些数据,并将其作为一个或多个CSV文件提供。数据位于多个表和/或视图中。所有这些都应该通过命令行工作。最好的方法是什么?

Answers:


11

阿伦

现在,可以从Oracle SQL Developer 4.1 EA2(4.1.0.18.37)获得sqlcl, 您可以像使用古老而著名的sqlplus一样使用它。sqlcl具有csv的输出格式设置

set sqlformat csv
spool x.csv
select * from yourtable[s];
spool off

有关sqlcl checkout Kris博客的更多信息

在sqlcl最简单之前,这是使用APEX并将报告导出到csv。在普通的旧sqlplus中,您可以使用

set lines 9999 -- the appropriate size
set head off  -- no header lines
set colsep ';' --column separator to ;
set pages 0 -- no pages
set feed off
select your data;
spool to_tofile
/
spool off

如果要将结果写在应用程序服务器或客户端上,则效果最好。如果必须将它们写入数据库服务器,则utl_file可能是一个更好的选择。

罗纳德。


8

您应该查看内置的UTL_FILE包。您可以通过多种方式使用它。

  1. 您可以在使用UTL_FILE程序包写入任意数量文件的程序包中编写任意数量的过程。然后可以从几乎所有应用程序(包括SQL * Plus)中调用这些过程。

  2. 您可以编写一个PL / SQL脚本来执行相同的工作,并通过在命令行中指定@scriptname从SQL * Plus命令行本身调用该脚本。

  3. 您可以使用UTL_FILE直接将一个块粘贴到SQL * Plus中,但这只能用于一次导出,即使那样也可能不是最佳途径。

在最简单的情况下,使用UTL_FILE进行文件导出将由对FOPEN的调用,对PUT_LINE的一个或多个调用以及对FCLOSE的调用组成


4

如果需要考虑性能,则可能需要考虑使用供应商提供的工具。

我评估了BMC,Wisdomforce,CoSort,DBCrane的工具。它们都比假脱机,utl_file或外部表快得多。我们之所以使用DBCrane,是因为我的老板不想在许可证上花费过多。


3

您可以使用Python和cx_Oracle模块将数据以CSV格式提取到磁盘。

使用cx_Oracle连接到Oracle的方法如下:

constr='scott/tiger@localhost:1521/ORCL12'
con = cx_Oracle.connect(constr)
cur = con.cursor()

提取数据后,您可以遍历Python列表并以CSV格式保存数据。

for i, chunk in enumerate(chunks(cur)):
    f_out.write('\n'.join([column_delimiter.join(row[0]) for row in chunk]))
    f_out.write('\n')

我在编写TableHunter-For-Oracle时使用了这种方法

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.