2014-10-17 389 views
0

我試圖使用Oracle SQL Developer中的SPOOL命令將SQL查詢的結果輸出到CSV文件。如何在Oracle SQL Developer中使用spool命令將查詢結果輸出到CSV文件

我能夠通過調用它作爲腳本輸出一個簡單的查詢結果。這裏是工作的查詢:

spool trivial_output.csv 
select /*csv*/ * from trivial_table; 
spool off; 

這就是我如何成功地把它稱爲​​(F5):

@'C:\Spool to CSV\trivial_query.sql' 

然而,當我試圖用一個稍微更復雜的查詢同樣的事情,我收到錯誤消息: 「SQL錯誤:ORA-00933:SQL命令不能正確地結束00933. 00000 - SQL命令不能正確地結束」

spool total_records.csv 
select /*csv*/  enrol.year, enrol.college, count(*) as "Total Records" 
from  enrolment enrol 
inner join regis_status_type regstatus 
on   enrol.regis_status_type_id = regstatus.regis_status_type_id 
where  enrol.year in ('201213', '201314') 
and   regstatus.regis_status_type_code in ('10','41') 
group by enrol.year, enrol.college 
order by enrol.year, enrol.college 
spool off; 
+0

你可能需要在你的SELECT子句一些硬編碼的逗號。事實上,不妨做好它,並且有一些硬編碼的雙引號,以防萬一任何大學都有逗號。 – 2014-10-17 18:39:51

+0

我不確定它是否重要,但Oracle錯誤消息表示錯誤在最後一行之前觸發(「假脫機」)。所以這個問題似乎晚於SELECT語句發生。 – b00kgrrl 2014-10-17 18:43:57

+1

看起來您在第二個示例中的SELECT語句後缺少分號。這會導致Oracle將「spool off」解釋爲SQL語句的最後一行,而不是單獨的SQL * Plus命令。這又會導致您的SQL語句在語法上無效。 – 2014-10-17 20:35:30

回答

1

我只需要添加一個分號來組合通道從SQL語句中執行SQL * Plus命令。由於Justin Cave

spool total_records.csv 
select /*csv*/  enrol.year, enrol.college, count(*) as "Total Records" 
from  enrolment enrol 
inner join regis_status_type regstatus 
on   enrol.regis_status_type_id = regstatus.regis_status_type_id 
where  enrol.year in ('201213', '201314') 
and   regstatus.regis_status_type_code in ('10','41') 
group by enrol.year, enrol.college 
order by enrol.year, enrol.college; 
spool off; 
0
spool "D:\test\test.txt" 

select 
    a.ename 
from 
    employee a 
inner join department b 
on 
( 
    a.dept_id = b.dept_id 
) 
; 
spool off 

這個查詢將在這裏後臺SQL結果d:\測試\ test.txt的

相關問題