我需要使用sqlplus從Oracle中的表中假脫機csv。以下是需要的格式:繼在sqlplus中假脫機csv文件時的頭格式化
"HOST_SITE_TX_ID","SITE_ID","SITETX_TX_ID","SITETX_HELP_ID"
"664436565","16","2195301","0"
"664700792","52","1099970","0"
的相關一塊shell腳本我寫的:
sqlplus -s $sql_user/[email protected]$sid <<eof>> /dev/null
set feedback off
set term off
set linesize 1500
set pagesize 11000
--set colsep ,
--set colsep '","'
set trimspool on
set underline off
set heading on
--set headsep $
set newpage none
spool "$folder$filename$ext"
select '"'||PCL_CARRIER_NAME||'","'||SITETX_EQUIP_ID||'","'||SITETX_SITE_STAT||'","'||SITETX_CREATE_DATE||'","'||ADVTX_VEH_WT||'"'
from cvo_admin.MISSING_HOST_SITE_TX_IDS;
spool off
(我已經使用了一些評論語句,以表示我試過,但couldn的事情「T去上班)
我收到的輸出是:
'"'||PCL_CARRIER_NAME||'","'||SITETX_EQUIP_ID||'","'||SITETX_SITE_STAT||'","'||SITETX_CREATE_DATE||'","'||ADVTX_VEH_WT||'"'
"TRANSPORT INC","113","00000000","25-JAN-13 10.17.51 AM",""
"TRANSPORT INC","1905","00000000","25-JAN-13 05.06.44 PM","0"
這表明頭文件被搞砸了 - 它實際上是打印應該被解釋爲sql語句的整個字符串,就像顯示的數據一樣。
選項我正在考慮:
1)使用COLSEP
set colsep '","'
spool
select * from TABLE
spool off
這就引入了其他的問題有前後的空格中的數據,第一,在文件的最後一個值沒有加引號
HOST_SITE_TX_ID"," SITE_ID"
" 12345"," 16"
" 12345"," 21
我的結論是,這種方法給我比前面描述的更多的胃灼熱。
2)獲取文件並使用正則表達式來修改標題。
3)離開頭部完全手動在文件的開頭添加一個頭字符串,使用腳本
選項2是更可行的,但我仍然有興趣在問,如果有可能是一個更好以某種方式格式化標題的方式,所以它有一個常規的csv(逗號分隔,雙引號限定)格式。
我正在儘可能減少硬編碼 - 我輸出的表格大約有40列,我目前正在爲大約400萬條記錄運行該腳本 - 每個記錄大約有10K個記錄。我會非常感謝任何建議,甚至與我的方法完全不同 - 我是一名學習程序員。
我很難看到這是如何回答這裏提出的問題。 –