2013-03-15 219 views
0

我的同事在嘗試將數據從Oracle數據庫導出爲CSV時遇到了一些問題。奇怪的是,如果他用NULL替換字段oc_cr_comments中的空格,那麼導出就起作用。將數據從Oracle數據庫導出爲CSV時出現ORA錯誤

TRIM (REPLACE(oc_cr_comments, CHR(32), NULL)) 

什麼可能導致通過用NULL替換空格解決的導出問題?

錯誤輸出是:

ERROR at line 1: 
ORA-29285: file write error 
ORA-06512: at "SYS.UTL_FILE", line 140 
ORA-06512: at "SYS.UTL_FILE", line 785 
ORA-06512: at "EFS.P_CRIMINAL_DISPOSITION", line 151 
ORA-06512: at line 1 

回答

1

在調用utl_file.fopen,什麼是被指定的max_linesize?在刪除空格之前該行多長時間?刪除空格後線路有多長?

我的猜測是,當您打開文件時,您在刪除空格之前指定了比實際行大小更小的最大行大小。如果刪除空格會導致線條大小現在小於最大線條大小,那麼可以解釋爲什麼在您執行替換之後它可以工作。

+0

就是這樣! [Oracle doc](http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/u_file.htm)指出,如果未指定,max_linesize默認爲1024,的記錄長約1400個字符。他應該爲max_linesize選擇什麼樣的價值?指定更高的值有什麼不利之處? – theblang 2013-03-18 14:52:47

+0

@mattblang - 任何值高達32K的作品。選擇較大行長度的唯一缺點是,如果某個下游系統會出現文件問題,並且/或者如果使用行長作爲一種約束來確保數據有效。 – 2013-03-18 15:39:41