如何在Oracle SQL Developer中将查询结果导出到csv?


Answers:


375

我正在使用的版本

替代文字

2012年5月5日更新

杰夫·史密斯(Jeff Smith)博客中显示,我认为这是从SQL Developer获取CSV输出的绝佳方法。Jeff的方法显示为下面的方法1:

方法一

将注释添加/*csv*/到您的SQL查询中,并作为脚本运行查询(使用F5或工作表工具栏上的第二个执行按钮)

在此处输入图片说明

而已。

方法二

运行查询

替代文字

右键单击并选择卸载。

更新。在Sql Developer版本3.0.04中,卸载已更改为导出 感谢Janis Peisenieks指出了这一点

替代文字

修订的SQL Developer版本3.0.04的屏幕截图

在此处输入图片说明

从格式下拉列表中选择CSV

替代文字

并按照屏幕上的其余说明进行操作。


25
+1。“卸载”一词对我来说似乎是违反直觉的。“加载”某些数​​据意味着将其插入数据库。因此,“卸载”应表示已删除数据...
Jeffrey Kemp

8
在版本3.0.04中,此选项已重命名为“导出”。
Janis Peisenieks 2011年

2
大。ps大写/*CSV*/对我不起作用,但小写对我/*csv*/有用。谢谢!
伊兰·棉兰

3
还要注意方法2可能会遇到一个bug(在我的版本3.0.04中仍然存在),该bug只是由于行数很大(大约3K行)而挂起。我使用的是这种老式的SQLPLUS,因为我没有首先看到上面的方法1,但是有些人可能会这样:{code} SET UNDERLINE OFF SET COLSEP','SET LINES 20000 PAGES 20000 SET FEEDBACK off --optional SET HEADING off假脱机C:\ Export \ EMP.csv-现在查询SELECT * FROM EMP; 假脱机
Jim P

1
@topr使用方法1,然后全选,复制并粘贴到文本编辑器中并另存为csv。您甚至可以直接将其粘贴到Excel中,但是我不确定。
特拉维斯2014年

45

不完全是“导出”,但是您可以在要导出的网格中选择行(或Ctrl- A选择所有行),然后使用Ctrl- 进行复制C

默认值为制表符分隔。您可以将其粘贴到Excel或其他编辑器中,并随心所欲地操作定界符。

另外,如果你使用Ctrl- Shift- C而不是Ctrl- C,你也复制列标题。


5
太棒了,我一直在专门研究如何复制标题。谢谢!
mishkin 2012年

3
唯一的问题是,如果您有很多行,这将意味着它将不得不再次查询整个数据集。如果查询时间很长,则意味着您要等待很长的第一页,然后再按ctrl + A会等待所有页面。换句话说,这是一个很好的解决方案,但仅在大部分时间有效,并且适用于相对更快或更小的查询。
伊兰·棉兰

长行计数会剥离您复制的内容!不要使用这个。
哈希

@Mark我自己从未见过这种情况。它仅保留前50行还是类似的内容?如果是这样,则有一个单独的偏好。它仅复制网格中当前的内容,但是如果滚动到网格底部,SQL Dev将自动获取更多行,因此我可以看到有人可能将其解释为错误。
BQ。

1
我尝试对43,000行数据执行此操作,并且它可以永久运行-导出选项的方式更快。如果您只有几行数据,那就太好了。
izikandrw

28

仅供参考,您可以替换/*csv*/ 为其他格式,以及包括/*xml*//*html*/。例如,select /*xml*/ * from emp将返回带有查询结果的xml文档。我在寻找一种从查询返回xml的简单方法时遇到了本文。


4
/ *插入* /特别有用。
jeremyjjbrown 2014年

文件在哪里?
异常,

没关系,我掩饰了“以脚本方式运行”部分,但没有意识到这与通常的运行按钮不同。
异常

4

仅供参考,对于遇到问题的任何人,CSV时间戳导出中都有一个错误,我花了几个小时来解决。我需要导出的某些字段是时间戳类型。即使在当前版本(截至本文发布时为3.0.04)中,似乎也存在CSV导出选项,无法将分组符号放在时间戳周围。由于时间戳记中的空格中断了我的导入,因此非常沮丧。我发现最好的解决方法是在所有时间戳上写一个带有TO_CHAR()的查询,尽管产生了更多的工作,但仍可产生正确的输出。我希望这可以节省一些时间,也可以让Oracle在其下一版本中脱颖而出。


1
我的版本3.0.04仍然存在一个错误,即它只是与较大的导出一起挂起(我的行是3K行)。我的简单解决方法是改用SQLPLUS:
Jim P

在我的情况下,空间数据类型(docs.oracle.com/cd/B19306_01/appdev.102/b14255/…)是以这种方式导出的(注意逗号),MDSYS.SDO_GEOMETRY(2001,8307,MDSYS.SDO_POINT_TYPE(-122.39096,37.79251,NULL),NULL,NULL)而不用引号引起来。而且我正在使用动态SQL,因此无法TO_CHAR()这些列。有什么建议?
红豌豆

即使我使用动态SQL并只是选择*,(并且我也不想为Spatial数据类型的单个SQL列的异常而对此进行修改),也许我可以尝试两件事:1)使用不同的COLSEP,例如'|',或2)在SELECT语句之前,指定应如何使用docs.oracle.com/cd/B19306_01/server.102/b14357/ch12013.htm
Red Pea,

2

从sql developer导出到本地系统。

Path : C:\Source_Table_Extract\des_loan_due_dtls_src_boaf.csv

    SPOOL "Path where you want to save the file"
    SELECT /*csv*/ * FROM TABLE_NAME;

1

CSV导出不会转义您的数据。提防结尾的字符串,\因为结果\"看起来像是转义的"而不是\。然后,您输入的数字错误,"整个行都被破坏了。


那可能不是错误-您可以决定如何对引号进行转义,默认情况是使用另一个引号字符(而不是反斜杠)将其转义。在这种情况下,"foo\"是一个完全有效的带引号的字符串。
肯·威廉姆斯

如果事先知道的话,用\\替换\的所有出现都非常简单。谢谢!
jpaugh

是的,对于大多数CSV导入工具来说都足够简单,而且可能会出错。
Wormbo
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.