我需要使用sqlplus從Oracle中的表中調整csv.以下是所需的格式:
"HOST_SITE_TX_ID","SITE_ID","SITETX_TX_ID","SITETX_HELP_ID"
"664436565","16","2195301","0"
"664700792","52","1099970","0"
以下是我寫的shell腳本的相關部分:@H_404_4@sqlplus -s $sql_user/$sql_password@$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
(我已經使用了一些注釋聲明來表示我嘗試但無法工作的事情)@H_404_4@
我收到的輸出是:@H_404_4@'"'||PCL_CARRIER_NAME||'","'||ADVTX_VEH_WT||'"'
"TRANSPORT INC","113","00000000","25-JAN-13 10.17.51 AM",""
"TRANSPORT INC","1905","25-JAN-13 05.06.44 PM","0"
這表明標題搞砸了 – 它實際上是打印應該被解釋為sql語句的整個字符串,就像顯示的數據一樣.@H_404_4@
我正在考慮的選項:@H_404_4@
1)使用colsep@H_404_4@set colsep '","'
spool
select * from TABLE
spool off
這引入了其他問題,因為具有前導和尾隨空格的數據,文件中的第一個和最后一個值不用引號括起來@H_404_4@HOST_SITE_TX_ID"," SITE_ID"
" 12345"," 16"
" 12345"," 21
我的結論是,這種方法比我之前描述的方法給了我更多的胃灼熱.@H_404_4@
2)獲取文件并使用正則表達式修改標題.@H_404_4@
3)完全保留標題并使用腳本手動在文件開頭添加標題字符串@H_404_4@
選項2更可行,但我仍然有興趣詢問,如果可能有更好的方法來格式化標題,所以它有一個常規的csv,(逗號分隔,雙引號有界)格式.@H_404_4@
我希望做盡可能少的硬編碼 – 我導出的表有大約40列,我目前正在運行大約400萬條記錄的腳本 – 每批約10K打破它們.我真的很感激任何建議,甚至完全不同于我的方法 – 我是學習的程序員.@H_404_4@
@H_404_35@
@H_404_35@
一個只有一個標題的csv的簡單方法就是這樣做
set embedded on
set pagesize 0
set colsep '|'
set echo off
set Feedback off
set linesize 1000
set trimspool on
set headsep off
嵌入式是一個隱藏的選項,但重要的是只有一個標頭@H_404_4@
@H_404_35@
總結
如果覺得編程之家網站內容還不錯,歡迎將編程之家網站推薦給程序員好友。
本圖文內容來源于網友網絡收集整理提供,作為學習參考使用,版權屬于原作者。