我建議以下辦法(使用17列節省一些時間)。我想你會想'作爲分隔符。
所以首先您可以生成命令本身(我使用的查詢USER_TABLES但你可以很容易地修改查詢,以滿足您的需求)
set pagesize 0
set linesize 5000
set trimspool on
(select q'!"my sql connection"<<EOF>> test_file.csv
SET TAB OFF ECHO OFF FEEDBACK OFF LINESIZE 5000 SQLPROMPT '' TRIMSPOOL OFF HEADING OFF UNDERLINE OFF PAGESIZE 0!' from dual)
union all
(select
q'!select '!' ||
listagg(column_name, ',') within group (order by table_name)
|| q'!' from dual union all!'
header
from all_tab_cols where table_name =
-- MODIFY TO YOUR TABLE NAME HERE [1]:
'USER_TABLES'
)
union all
(select
'select ' ||
listagg(column_name, q'! || ',' || !') within group (order by table_name)
-- REPLACE USER_TABLES TO YOUR TABLE NAME HERE [2]:
|| ' from user_tables where rownum <= 50;'
cmd
from all_tab_cols where table_name =
-- MODIFY USER_TABLES TO YOUR TABLE HERE [3]:
'USER_TABLES'
)
union all
(select 'exit
EOF' from dual);
您可以測試該查詢,然後將其替換USER_TABLES你在三個地方擁有自己的表名(在[1],[2],[3]行之後)。
之後採取的SQL * Plus導致,當你運行是你應該得到預期的結果。
希望它有幫助。
你不會得到CSV輸出與'選擇*',甚至選擇特定列這是最好無論如何,在SQL \ * Plus中。 (SQLcl和SQL Developer有選項可以做到這一點)。你可以改變'colsep',但是你會得到一個空白的負載。線的最大長度是多少? - 所有列的總大小(隱式數/數據轉換)?你是否在同一個操作系統上運行並打開文件 - 也許你會看到換行符問題,具體取決於你打開它的內容嗎?你有價值與換行符?當然,舉例說明會有所幫助。 –