代码:
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/