我想要一種使用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. 如何將列表添加到字典,然後輸出到.csv
- 6. 從Oracle的sqlplus輸出的html超鏈接讀取輸出
- 7. 如何在Oracle Application Express中自動將表格導出爲CSV?
- 8. 將csv加載到Oracle中的表中
- 9. 如何使用c#將csv數據導入到Oracle中#
- 10. 輸出鍵,用sqlplus
- 11. 如何將具有空間的變量從批處理傳輸到oracle sqlplus
- 12. 如何將Facebook列表導出到csv?
- 13. 如何使用sql查詢得到表格格式輸出給定的表格
- 14. Oracle SQLPlus:如何在不必首先發出spool off命令的情況下顯示sqlplus命令的輸出?
- 15. 如何將輸出存儲到python中的csv列中
- 16. 如何使用Javascript使用給定的輸入創建輸出表?
- 17. 如何從sqlplus查詢「清理」輸出?
- 18. 如何將Unicode輸出寫入到要在Excel中使用的.csv文件中?
- 19. 卷繞與用sqlplus到CSV
- 20. 如何將csv文件上傳到Oracle
- 21. 如何在sqlplus中執行PL/SQL Oracle?
- 22. 使用python scrapy將項目輸出到csv文件 - 問題如何在csv文件中輸出
- 23. 如何在oracle數據庫的sqlplus中列出表中的所有數據?
- 24. 如何將json的輸出寫入CSV?
- 25. 修改列表中的項目不會給出任何輸出
- 26. 如何在sqlplus oracle中刪除表中的所有數據
- 27. 如何將CSV數據加載到比csv文件列多的Oracle表中?
- 28. 如何將輸入從shell腳本傳遞給sqlplus?
- 29. 如何將特定的PUBLIC電子表格導出到csv
- 30. 如何使用qt將數據庫postgres表導出到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