ChatGPT解决这个技术问题 Extra ChatGPT

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

我正在使用 Oracle SQL Developer 3.0。试图弄清楚如何将查询结果导出到文本文件(最好是 CSV)。右键单击查询结果窗口不会给我任何导出选项。


G
Greg Burghardt

我正在使用的版本

https://i.stack.imgur.com/yZ3aQ.jpg

2012 年 5 月 5 日更新

Jeff Smith 显示 blogged,我认为这是从 SQL Developer 获取 CSV 输出的最佳方法。 Jeff 的方法如下图方法一所示:

方法一

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

select /*csv*/ *
from emp;

https://i.stack.imgur.com/Iqpqw.jpg

而已。

您还可以使用 spool 将其自动保存为 CSV 文件:

spool "/path/to/file.csv";
select /*csv*/ *
from emp;
spool off;

只需确保“以脚本方式运行”或按 F5。

方法二

运行查询

https://i.stack.imgur.com/tLYlY.jpg

右键单击并选择卸载。

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

https://i.stack.imgur.com/CQ4Qb.jpg

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

https://i.stack.imgur.com/BfgNB.jpg

从格式下拉列表中选择 CSV

https://i.stack.imgur.com/tsWqP.jpg

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


+1。 “卸载”这个词对我来说似乎是反直觉的。 “加载”一些数据意味着将其插入数据库;因此“卸载”应该意味着数据被删除......
在 3.0.04 版中,此选项已重命名为 Export。
伟大的。 ps 大写 /*CSV*/ 对我不起作用,但小写 /*csv*/ 可以。谢谢!
另请注意,方法 2 可能会遇到错误(仍然存在于我的版本 3.0.04 中),它只是挂起大量行数(3K 行左右)。我正在使用这个老派 SQLPLUS,因为我没有首先看到上面的方法 1,但有些人可能会喜欢这样: {code} SET UNDERLINE OFF SET COLSEP ',' SET LINES 20000 PAGES 20000 SET FEEDBACK off --optional SET HEADING off Spool C:\Export\EMP.csv -- 现在查询 SELECT * FROM EMP;阀芯关闭
@topr 使用方法1,然后全选,复制粘贴到文本编辑器中保存为csv。您甚至可以直接粘贴到 Excel 中,但我不确定。
H
Hulk1991

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

默认为制表符分隔。您可以将其粘贴到 Excel 或其他编辑器中,然后随意操作分隔符。

此外,如果您使用 Ctrl-Shift-C 而不是 Ctrl-C,您还将复制列标题。


太棒了,我正在专门研究如何复制标题。谢谢!
唯一的问题是,如果您有很多行,这将意味着它必须再次查询整个数据集。如果它是一个长时间运行的查询,这意味着您等待第一页很多,然后在按下 ctrl+A 后等待所有页面。换句话说,很好的解决方案,但只在大部分时间有效,并且用于相对更快或更小的查询。
在长排数上,它会剥离你复制的东西!不要使用这个。
@Mark 我自己从未见过这种情况。它是否只保留前 50 行或类似的东西?如果是这样,则对此有单独的偏好。它只复制当前网格中的内容,但如果您滚动到网格底部,SQL Dev 将自动获取更多行,因此我可以看到有人可能会将其解释为错误。
我尝试在 43K 行数据上执行此操作,它永远运行——导出选项更快。如果您只有几行数据,那就太棒了。
Y
Yves Rochon

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


/*insert*/ 特别有用。
文件去哪里了?
啊没关系,我忽略了“作为脚本运行”部分,没有意识到这与通常的运行按钮不同。
@Anomaly 那么,文件去哪里了?谢谢。
@Anomaly 没问题。从其他答案和评论中,我了解到您指定了这样的文件路径SPOOL 'file01.csv' REPLACE; SELECT * FROM foo WHERE categ in ('A', 'B'); SPOOL off;
B
BoeroBoy

仅供遇到问题的任何人参考,CSV 时间戳导出中存在一个错误,我只是花了几个小时解决这个问题。我需要导出的一些字段是时间戳类型。即使在当前版本(截至本文发布时为 3.0.04)中,CSV 导出选项似乎也无法将分组符号放在时间戳周围。非常令人沮丧,因为时间戳中的空格破坏了我的导入。我发现的最佳解决方法是在我的所有时间戳上使用 TO_CHAR() 编写查询,这会产生正确的输出,尽管需要做更多的工作。我希望这可以节省一些时间,或者让 Oracle 在他们的下一个版本中参与进来。


我的版本 3.0.04 仍然有一个错误,它只是挂起较大的导出(我的是 3K 行)。我的简单解决方法是改用 SQLPLUS:
在我的例子中,空间数据类型 (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 并且只选择 *,(并且我不想为空间数据类型的单个 SQL 列的异常而修改它),也许我可以尝试两件事:1)使用不同的 COLSEP '|',或 2) 在 SELECT 语句之前,使用 docs.oracle.com/cd/B19306_01/server.102/b14357/ch12013.htm 指定此列的格式
A
Arpan Saini

从 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;

A
Anonymous

CSV 导出不会转义您的数据。注意以 \ 结尾的字符串,因为生成的 \" 看起来像转义的 " 而不是 \。然后你有错误的 " 数量并且你的整行都被破坏了。


这可能不是错误 - 您可以决定如何转义引号,默认值是使用另一个引号字符而不是反斜杠来转义它。在这种情况下,"foo\" 是一个完全有效的带引号的字符串。
如果你事先知道的话,用 \\ 替换每次出现的 \ 是很简单的。谢谢!
是的,对于大多数 CSV 导入工具来说足够简单并且可能是错误的。