2016-02-12 49 views
0

我試圖閥芯與208個字段的標頭文件中的SPOOL長頭不能在文件

set feedback off 
    set verify off 
    set head off 
    set echo off 
    set pages 0 
    set trimspool on 
    SET LINESIZE 500 

spool ${FILE_NAME} 

select 'Field1,Field2,.........Field208' 
from dual; 

SPOOL OFF 
exit 

我收到以下錯誤

SP2-0027: Input is too long (> 2499 characters) - line ignored 

如何實現任務??

回答

2

你需要分割你的字符串字面量分成兩個或多個線,以避免the SQL*Plus command line limit(這與假脫機沒有關係)。然後,您可以單獨字符串文字串連在一起,得到在同一行輸出:

select 'Field1,Field2,.........Field99' 
    || 'Field101,Field102,.........Field199' 
    || 'Field201,Field202,.........Field208' 
from dual; 

怎麼可能有時你需要分割字符串,何地,取決於你的實際值。

您還需要設置您的linesize遠高於您當前的500,否則它會將輸出包裝到多行;它至少需要至少2500,因爲你已經達到了至少,但可能還要多一點 - 再次取決於你的實際數據。也許你的意思是5000 ...

+0

感謝Alex在您的解決方案中正常工作 –

0

SP2-0027:輸入太長(> 2499個字符) - 在線忽略

你打的的SQL * Plus的限制,這對線的長度絕對上限2,499個字符

在SQL * Plus中執行此操作的唯一方法是在SQL語句中使用換行符而不是一行,並將每行與前一行連接起來。

例如,

更改此:

SQL> SELECT 'lalitkumar' NAME from dual; 

NAME 
---------- 
lalitkumar 

要這樣:

SQL> select 'lalit' 
    2 ||'kumar' name from dual; 

NAME 
---------- 
lalitkumar 

SQL> 
+0

只要在選擇列表中放置一個換行符就會將輸出分成兩行,這不會像CSV文件中的頭行那樣有用(這似乎是這樣)。嵌入CHR(13)甚至進一步超過極限? –

+0

我打算在每個換行符後連接它,有人我的手沒有鍵入頭部中的內容;-) –

+0

但是,您仍然不希望在*輸出*中換行,當然?這改變了OP的結果? –