我想要一種使用sql * plus將Oracle 11g中的任何給定表動態導出爲csv的方法 - 而不是每次都需要明確地硬編碼列名。如何使用sqlplus將oracle中的任何給定表輸出到csv
0
A
回答
0
搜索堆棧溢出後,我無法找到這個問題的確切答案 - 因此我開發了我自己的解決方案。
下面是SQL腳本,我寫道:
SET echo off
SET verify off
SET heading off
SET pages 50000
SET feedback off
SET newpage none
SET termout off
SET linesize 900
SET trimspool on
SET serveroutput on
define table_name = &1
define spool_path = &2
var rc refcursor
column qry new_val capture
SELECT 'select ''"'' || ' || listagg(column_name,' || ''","'' || ') within group (order by column_id) || ' || ''"'' as rec from &table_name' qry
FROM user_tab_cols
WHERE table_name = '&table_name';
spool &spool_path
SELECT listagg(column_name,',') WITHIN GROUP (ORDER BY column_id)
FROM user_tab_cols
WHERE table_name = '&table_name';
BEGIN
FOR v_rec IN (&capture) LOOP
dbms_output.put_line(v_rec.rec);
END LOOP;
END;
/
spool off
EXIT
該腳本需要兩個參數 - 第一個參數是表名,第二個是閥芯路徑。
本質上,第一查詢:
SELECT 'select ''"'' || ' || listagg(column_name,' || ''","'' || ') within group (order by column_id) || ' || ''"'' as rec from &table_name' qry
FROM user_tab_cols
WHERE table_name = '&table_name';
動態創建使用user_tab_cols和LISTAGG到每個列名強制成一條線一個新的選擇語句(其加載到&捕獲替代變量) - 這個動態創建的選擇語句基本上將每列連接在一起,並用逗號分隔。稍後,當我們通過動態生成的select語句來循環時,會生成每行數據。
標題是由一個類似的查詢產生的(第一個動作一旦我們開始假脫機),但是爲此我們可以直接列出列標題名稱。
通過在您選擇的表格上測試兩個查詢來查看結果,可以更容易理解!
0
請使用以下語法。
SET MARKUP HTML ON SPOOL ON
HEAD "<title>Data Extract</title> - <meta http-equiv='Content-Type' content='application/vnd.ms-excel;'>
<style type='text/css'>
</style>"
SET ECHO OFF
SPOOL output.xls
select * from &tablename ;
spool off
exit
提示時輸入表名。
Abhi
0
您可以使用SET Colsep選項。
SET COLSEP ","
SET PAGES 0
SET FEEDBACK OFF
SPOOL output.csv
select * from HR.employees;
spool off
exit
相關問題
- 1. 如何將sysdate添加到Oracle SQLPlus報告中的標題中?
- 2. 如何將shell sqlplus配置爲oracle
- 3. 如何創建KSH並將數組傳遞給Oracle sqlplus
- 4. 如何生成sqlplus到csv文件?
- 5. 從Oracle的sqlplus輸出的html超鏈接讀取輸出
- 6. 將csv加載到Oracle中的表中
- 7. 如何使用c#將csv數據導入到Oracle中#
- 8. 如何將具有空間的變量從批處理傳輸到oracle sqlplus
- 9. Oracle SQLPlus:如何在不必首先發出spool off命令的情況下顯示sqlplus命令的輸出?
- 10. 如何從sqlplus查詢「清理」輸出?
- 11. 卷繞與用sqlplus到CSV
- 12. 如何使用Javascript使用給定的輸入創建輸出表?
- 13. 如何將csv文件上傳到Oracle
- 14. 如何將json的輸出寫入CSV?
- 15. 修改列表中的項目不會給出任何輸出
- 16. 如何在sqlplus oracle中刪除表中的所有數據
- 17. 如何將CSV數據加載到比csv文件列多的Oracle表中?
- 18. 如何在將sqlplus輸出分配給shell變量時跳過美元符號?
- 19. 如何使用qt將數據庫postgres表導出到csv?
- 20. Oracle查詢並輸出到CSV
- 21. 如何使用Verilog任務將值輸出到寄存器?
- 22. 如何在任何給定的數字列表中找到MAX?
- 23. Oracle:使用sqlplus設置NLS_PARAMETERS
- 24. 如何使用SQLPLUS查詢的輸出提示用戶輸入更多
- 25. 將CSV文件加載到Oracle中表
- 26. 從字典中,如何將特定列輸出爲CSV
- 27. 如何在Oracle SQL Developer中使用spool命令將查詢結果輸出到CSV文件
- 28. 如何使用JFileChooser將CSV格式數據輸入到JTable中
- 29. 如何使用python將數字簽名添加到任何給定文件中
- 30. 如何將survfit輸出作爲.csv表導出?
歡迎來到SO。 [this](https://asktom.oracle.com/pls/apex/f?p=100:11:::NO::P11_QUESTION_ID:88212348059)應該讓你開始。如果切換到SQLcl,則不必編寫代碼。 – jeff6times7
對不起,我應該補充說明 - 在我的例子中,我的公司使用了一個基於德國的提供商來管理我們的數據庫。雖然我可以使用UTL_FILE解決方案,但我認爲訪問該文件會很困難。已經有人建議設立SFTP,但在這方面進展往往令人沮喪。這就是爲什麼直接使用sqlplus編寫csv實際上更簡單 - 雖然也許更骯髒 - 選項 – Connor