2016-02-12 57 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的结果? –