我有一表,创建如下:
create table tmp (name varchar2(10),n char(10));
然后插入一条数据
insert into tmp values('dd   ','kk   ');
我想用spool将其导出成TXT文件,我做了多种set的尝试,但是导出的文件要不就是结尾很多空格,
要不就是结尾没空格; 而我想要的结果是结尾正好8个空格,因为n char(10)应该共10的长度,去掉kk正好8个空格才对...我的代码如下:SET ECHO OFF;
SET FEEDBACK OFF;
SET HEADING OFF;
SET PAGESIZE 0;
SET LINESIZE 1000;
SET TRIMSPOOL ON;
SET TRIMOUT ON;
SET TERMOUT OFF;
SET VERIFY OFF;SPOOL D:\EXT_CONTRAT1.TXT;SELECT name||'|'||n
FROM tmp;SPOOL OFF;

解决方案 »

  1.   

    试一下用列格式化命令:
    col a for a10
      

  2.   

    SET TRIMSPOOL ON  是将每行最后的空格去除,包括字段本身的和你在SET LINESIZE 1000时设置的,你这样想在KK后面有8个空格,想通过SPOOL设置实现,不好办吧?
      

  3.   

    不明白你的目的到底是什么,不过如果只是想把结果输出到文本,并且不依靠程序来实现,那使用plsql develop运行Select语句,把结果拷贝并粘贴到一个文本文件里,不就行了吗?
      

  4.   

    如果不用SET TRIMSPOOL ON,空格将填满到linesize大小,也就是1000
    但是每行的长度并不确定,我希望输出的是真实的长度,在当前的例子应该是dd |kk      ,也就是
    正好14个字符,kk后面应该是8个空格才对
    难道用SPOOL实现不了
      

  5.   

    用spool要快些,数据量挺大的
    我只是写了个小的例子说明问题
      

  6.   

    各种大侠帮帮忙啊,我这种需求用SPOOL能解决么
      

  7.   

    不明白你为什么要导出时要在KK后面加8个空格,    你把所有的空格都去了   然后再导入另一张表时,如果表的字段是CHAR(10) ORACLE会自动补充8个空格的啊?      如果在KK后面加其他的字符如‘*’  好处理,  空格不好弄
      

  8.   


    恩那如果字段n的类型是varchar2(10),我希望导出时保留空格,使得之后的导入能保留原来的空格能做到么?
      

  9.   

    看样子弄不了有没有比SPOOL更快的方式呢?
      

  10.   

    请使用组合参数
    set linesize 600 假设总长度为600,其中内容长度为592个,结尾空格为8个
    set trimspool on 此参数为不截取结尾空格,这样一行长度就是600个另外空格可以使用如下函数生成
    LPAD(NVL(NULL,' '),8,' ')