關於spool(spool是sqlplus的命令,不是sql語法裡面的東西。)
對於spool資料的sql,最好要自己定義格式,以方便程式直接匯入,sql語句如:
select taskindex||'|'||commonindex||'|'||tasktype||'|'||to_number(to_char(sysdate,'yyyymmdd')) from ssrv_sendsms_task;
spool常用的設定
set colsep' '; //域輸出分隔符
set echo off; //顯示start啟動的指令碼中的每個sql命令,預設為on
set feedback off; //回顯本次sql命令處理的記錄條數,預設為on
set heading off; //輸出域標題,預設為on
set pagesize 0; //輸出每頁行數,預設為24,為了避免分頁,可設定為0。
set termout off; //顯示指令碼中的命令的執行結果,預設為on
set trimout on; //去除標準輸出每行的拖尾空格,預設為off
set trimspool on; //去除重定向(spool)輸出每行的拖尾空格,預設為off
匯出文字資料的建議格式:
sql*plus環境設定set newpage none
set heading off
set space 0
set pagesize 0
set trimout on
set trimspool on
set linesize 2500
注:linesize要稍微設定大些,免得資料被截斷,它應和相應的trimspool結合使用防止匯出的文字有太多的尾部空格。但是如果 linesize設定太大,會大大降低匯出的速度,另外在windows下匯出最好不要用plsql匯出,速度比較慢,直接用commend下的 sqlplus命令最小化視窗執行。
方法一:採用以下格式指令碼
set colsep '|' --設定|為列分隔符
set trimspool on
set linesize 120
set pagesize 2000
set newpage 1 --設定頁與頁之間的分隔
set heading off
set term off
set num 18
set feedback off
spool 路徑+檔名
select * from tablename;
spool off
方法二:採用以下指令碼
set trimspool on
set linesize 120
set pagesize 2000
set newpage 1
set heading off
set term off
spool 路徑+檔名
select col1||','||col2||','||col3||','||col4||'..' from tablename;
spool off
比較以上方法,即方法一採用設定分隔符然後由sqlplus自己使用設定的分隔符對欄位進行分割,方法二將分隔符拼接在select語句中,即手工控制輸出格式。
在實踐中,發現通過方法一匯出來的資料具有很大的不確定性,這種方法匯出來的資料再由sqlldr匯入的時候出錯的可能性在95%以上,尤其對大批量的資料表,如100萬條記錄的表更是如此,而且匯出的資料檔案狂大。
而方法二匯出的資料檔案格式很規整,資料檔案的大小可能是方法一的1/4左右。經這種方法匯出來的資料檔案再由sqlldr匯入時,出錯的可能性很小,基本都可以匯入成功。
因此,實踐中我建議大家使用方法二手工去控制spool檔案的格式,這樣可以減小出錯的可能性,避免走很多彎路。
輸出自定義日期格式
通過實現iformatprovider,icustomformatter介面可以實現自定義的格式輸現,這裡有實現乙個例子,以輸出日期格式為例 顯示今天 明天 後天和 x月x日 等 1 假設我們有多種顯示日期格式的需求,我們可以定義乙個列舉如下 public enum datetimeformat 2...
java 匯出自定義樣式excel
由於專案需要 要求匯出乙個這樣的 然而 正常匯出的 都是這樣嬸兒地 這種格式網上demo有很多就不詳細說了 主要說說上面三行是怎麼畫的。第一行大標題,是9行合併成的一行,而且字型大小需要單獨設定 hssfsheet sheet hssfcell cell response.setheader con...
彈出自定義視窗
1.window物件的open方法 window的open方法用於建立乙個新視窗,語法如下 window.open url,windowname windowfeatures replaceflag url 彈出視窗的url位址 windowname 彈出視窗的名稱,可為空 windowfeatur...