导出了下面四个字段
CONTENT_BASE64  VARCHAR2(4000) Y                         
CONTENT_MD5     VARCHAR2(4000) Y     
COMMENTS_BASE64 VARCHAR2(4000) Y   
AREA_BASE64     VARCHAR2(4000) Y     
spool脚本如下:
   set term off
   --set wrap off 
   set heading off 
   set verify off
   set pagesize 0 
   --set long 90000
   set linesize 32767 
   set trimspool on 
   set feedback off 
   set echo off 
   col TXT format a20000
   --spool /home/witzzy/zzynode/data/cont_data.tmp
   spool /home/witzzy/zzynode/data/cont_20130509091213_cmcc_shanghai_01.data
   select seed_id||','|| seed_type||','|| to_char(seed_time,'yyyymmddhh24miss')||','|| ori_id||','|| content_base64||','|| content_md5||','|| cat_id||','|| day_prop||','|| COMMENTS_BASE64 ||','|| to_char(plan_exetime,'yyyymmddhh24miss')||','|| last_userid||','|| to_char( last_modtime,'yyyymmddhh24miss')||','|| status||','|| is_delete||','|| AREA_BASE64||','|| title||','||play_time||','|| contype_id||','||   vendor||','|| cp_id  TXT
    from tmp_v_expseeds a where not exists(select 1 from T_EXP_SEEDS b where a.ori_id=b.ori_id and a.seed_id=b.seed_id and a.seed_time=b.seed_time and b.t_flag=1 and b.flag=0 );
   spool off; 表结构如下:
SQL> desc tmp_v_expseeds;
Name            Type           Nullable Default Comments 
--------------- -------------- -------- ------- -------- 
SEED_ID         VARCHAR2(200)  Y                         
SEED_TYPE       NUMBER         Y                         
SEED_TIME       DATE           Y                         
ORI_ID          NUMBER         Y                         
CONTENT_SEED    VARCHAR2(500)  Y                         
CONTENT_BASE64  VARCHAR2(4000) Y                         
CONTENT_MD5     VARCHAR2(4000) Y                         
CAT_ID          NUMBER         Y                         
DAY_PROP        NUMBER         Y                         
COMMENTS        VARCHAR2(2000) Y                         
COMMENTS_BASE64 VARCHAR2(4000) Y                         
PLAN_EXETIME    DATE           Y                         
LAST_USERID     VARCHAR2(64)   Y                         
LAST_MODTIME    DATE           Y                         
STATUS          NUMBER         Y                         
IS_DELETE       NUMBER         Y                         
AREA            VARCHAR2(20)   Y                         
AREA_BASE64     VARCHAR2(4000) Y                         
TITLE           VARCHAR2(100)  Y                         
PLAY_TIME       NUMBER         Y                         
CONTYPE_ID      NUMBER         Y                         
CON_NAME        VARCHAR2(50)   Y                         
CAT_NAME        VARCHAR2(60)   Y                         
USER_NAME       VARCHAR2(64)   Y                         
VENDOR          VARCHAR2(100)  Y                         
CP_ID           NUMBER         Y spool,varchar2(4000)换行,linesize

解决方案 »

  1.   

    导出的数据如下, 第一行长度是96,接着换行后就是64,,求助
    [witzzy@zzysvr1 zzynode]$ cat  /home/witzzy/zzynode/data/cont_20130509091213_cmcc_shanghai_01.data |head
    110000028,1,20120801114729,1000,5bm456aP6K6h566X5YWs5byP77ya77yI5YGl5bq3K+eUnOicnCvlvIDlv4Mr5aaC
    5oSP77yJLe+8iOeXm+iLpivmgrLkvKQr5rKu5LinK+WkseaEj++8iT3kuIDnlJ/k
    uIDkuJYq5bm456aP44CC5rOo77ya5Yeh5pS25Yiw5pys5p2h5L+h5oGv6ICF77yM
    5q2k5YWs5byP5Lqr55So5LiA55Sf77yB,63DDA2B354D615CBE6F4752B0D5E9A1E,1,1,ICAg,20120801000000,CZTY001,20120730125237,2,0,5LiN6ZmQ,,,0,CZTY,20110000034,1,20120801114729,1006,5L2g5Li65L2V5a6M5YWo6YO95rKh5raI5oGvLOaIkeWwseWDj+S4gOWPquicguaJ
    vuS4jeWIsOicguicnCzlsIbov4fljrvkuIDlvKDkuIDlvKDnmoTmkpUs6L+Z5pel
    5Y6G6KaB5pKV5Yiw5L2V5pe2LOaJjeacieS9oOeahOWtlw==,21B75B384D89E976915BEF98F40729FE,3,1,Y2hlbmd6aGl0aWFueWFuZw==,20120801000000,CZTY001,20120730125455,2,0,5LiN6ZmQ,,,0,CZTY,20110000036,1,20120801114729,1017,57Sn5oCl6YCa55+l77ya5oiR6KaB5LiN5oOc5LiA5YiH5Luj5Lu35YG35Yiw5L2g
    [witzzy@zzysvr1 zzynode]$
      

  2.   

    这个应该是字段内容里面包含了换行符,SPOOL的时候才会出现这种情况
      

  3.   


    没有啊  这几个串里面不会有十六进制的回车换行的(0X0D0A),,虽然字符串中有0D0A,但是这不是十六进制的
      

  4.   

    我的意思是你的串里面可能包含了回车换行符,这个是隐式的。需要检查一下。select seed_id||','|| seed_type||','|| to_char(seed_time,'yyyymmddhh24miss')||','|| ori_id||','|| content_base64||','|| content_md5||','|| cat_id||','|| day_prop||','|| COMMENTS_BASE64 ||','|| to_char(plan_exetime,'yyyymmddhh24miss')||','|| last_userid||','|| to_char( last_modtime,'yyyymmddhh24miss')||','|| status||','|| is_delete||','|| AREA_BASE64||','|| title||','||play_time||','|| contype_id||','||   vendor||','|| cp_id  TXT
        from tmp_v_expseeds a where not exists(select 1 from T_EXP_SEEDS b where a.ori_id=b.ori_id and a.seed_id=b.seed_id and a.seed_time=b.seed_time and b.t_flag=1 and b.flag=0 );
    and a.seed_id=110000028在PLSQL里面查看是否有换行
      

  5.   


    en嗯  明白了    原因是base64编码出来的二进制数据有0D0A,再用cast_to_varchar2的时候,直接将其转成了回车换行--罪魁祸首
    select  utl_raw.cast_to_varchar2('0D0A') from dual;
      

  6.   

    真正的原因是“ oracle中使用base64编码时是每64个字符添加一个回车换行,不足64个字符的就不会添加回车换行。”