sql - 如何在oracle sql Developer中使用spool正确将select语句的结果导出到Csv文件中

标签 sql oracle oracle11g

代码:

set heading off
  set arraysize 1
  set newpage 0
  set pages 0
  set feedback off
  set echo off
  set verify off

spool 'c:\farmerList.csv'
/

select FIRSTNAME','LASTNAME','TRN','CELL','PARISH

spool off

文件正在保存到目录中,但它保存的是“select FIRSTNAME”、“LASTNAME”、“TRN”、“CELL”、“PARISH”,而不是以 csv 格式保存查询结果。我做错了什么?

最佳答案

您的选择不完整,因为您没有 from 子句,但不确定您是否在复制粘贴中丢失了该子句。事实上,没有什么可运行的,因为部分语句永远不会执行(下一行不会终止 ;/)。如果您确实有一个 from farmer; 子句,那么它可能会显示该命令以及 ORA-00923 错误。

您不能只在字段之间放置带引号的逗号,您需要使用 || 连接符号将字段与该字符连接起来:

spool 'c:\farmerList.csv'

select FIRSTNAME
    ||','|| LASTNAME
    ||','|| TRN
    ||','|| CELL
    ||','|| PARISH
from farmers;

给出一个包含

的文件
Joe,Grundy,X,Y,Ambridge

这些字段不必位于单独的行上,我只是发现这样更容易阅读和跟踪逗号。

您不需要 spool 命令后面的 / - 它将重新执行 spool 之前的最后一条语句(如果有的话) - 而您不需要不需要在假脱机文件名周围加上引号,除非它包含空格,但它们不会造成伤害。

还有一个set colsep您可以使用该命令将列分隔符变成逗号,但您必须担心填充,因此我发现将列连接在一起更容易,就像您(几乎)所做的那样。


但那是针对 SQL*Plus 的,因为我没有注意到标题中的 SQL Developer 引用。 Spool 在 Developer 中有点奇怪,因为它似乎会捕获和回显您可能不想要的东西,并且并非所有 set 命令都有效(哪些命令取决于版本)。

我认为,更安全且首选的方法是运行不带连接逗号的普通查询:

select FIRSTNAME, LASTNAME, TRN, CELL, PARISH
from farmers;

并使用“运行”而不是“运行脚本”,以便结果显示在查询结果窗口的 GridView 中。右键单击网格并选择“导出”。然后,您可以另存为 CSV,甚至另存为 XLS,并且如果您愿意,还可以选择不包含标题行。

关于sql - 如何在oracle sql Developer中使用spool正确将select语句的结果导出到Csv文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15907015/

相关文章:

java - 将日期时间转换为 yyyy-MM-dd HH :mm:ss"format

mysql - SQL 查找所有用户的共同特征

sql - 如何根据 BLOB 列的长度获取表中前 10 大行

oracle - PostgreSQL 与甲骨文

SQL:选择具有相同单词的字符串

java - Jboss EAP 6.3部署错误: oracle datasource not found

sql - PIVOT Oracle - 将多行数据转换为具有多列的单行,无聚合数据

mysql - SQL Server 中的 COALESCE 与 MySQL 中的 COALESCE

php - 评论区sql注入(inject)

java - ResultSet 的 Oracle JDBC 性能