代码:
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格式的查询结果。我做错了什么?
答案 0 :(得分:3)
您的选择不完整,因为您没有from
条款,但不确定您是否在复制粘贴中丢失了该条款。因为它没有任何东西可以运行,因为部分语句永远不会被执行(下一行没有终止;
或/
)。如果你确实有一个from farmers;
子句,它可能会显示命令加上一个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在开发人员中有点奇怪,因为它似乎陷阱并回应你可能不想要的东西,并且并非所有set
命令都有效(哪些命令取决于版本)。
我认为更安全和首选的方法是运行没有连接逗号的普通查询:
select FIRSTNAME, LASTNAME, TRN, CELL, PARISH
from farmers;
并使用'run'而不是'run script',以便结果显示在查询结果窗口的网格视图中。右键单击网格,然后选择“导出”。然后,您可以保存为CSV,甚至可以保存为XLS,如果您愿意,可以选择没有标题行。
答案 1 :(得分:-1)
这是正确的解决方案,请仔细阅读
import java.sql.*;
import java.io.*;
import au.com.bytecode.opencsv.CSVWriter;
public class TableExport {
public static void main(String[] args) {
try{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","name","password");
conn.setAutoCommit(false);
Statement statement = conn.createStatement();
ResultSet resultData = statement.executeQuery("select * from your_table");
CSVWriter writer = new CSVWriter(new FileWriter(new File("D:/Uploads/Output5.csv")), '|');
writer.writeAll(resultData, true);
writer.close();
}catch (Exception e){
System.out.println("Error" +e);
}
}
}
如果有人喜欢这个,请注意你需要在库文件夹中使用oracle-jdbc.jar和opencsv1.7.jar才能正确执行此代码。