spool导出VARCHAR2(4000)的数据就换行了,linesize设置了貌似没有什么效果。急急急,求助。。

-无-为- 2013-05-09 09:23:39
导出了下面四个字段
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
...全文
705 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
-无-为- 2013-05-09
  • 打赏
  • 举报
回复
引用 4 楼 vanjayhsu 的回复:
我的意思是你的串里面可能包含了回车换行符,这个是隐式的。需要检查一下。 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里面查看是否有换行。。。
en嗯 明白了 原因是base64编码出来的二进制数据有0D0A,再用cast_to_varchar2的时候,直接将其转成了回车换行 --罪魁祸首 select utl_raw.cast_to_varchar2('0D0A') from dual;
vanjayhsu 2013-05-09
  • 打赏
  • 举报
回复
我的意思是你的串里面可能包含了回车换行符,这个是隐式的。需要检查一下。 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里面查看是否有换行。。。
-无-为- 2013-05-09
  • 打赏
  • 举报
回复
引用 2 楼 vanjayhsu 的回复:
这个应该是字段内容里面包含了换行符,SPOOL的时候才会出现这种情况
没有啊 这几个串里面不会有十六进制的回车换行的(0X0D0A),,虽然字符串中有0D0A,但是这不是十六进制的
vanjayhsu 2013-05-09
  • 打赏
  • 举报
回复
这个应该是字段内容里面包含了换行符,SPOOL的时候才会出现这种情况
-无-为- 2013-05-09
  • 打赏
  • 举报
回复
导出的数据如下, 第一行长度是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,20

110000034,1,20120801114729,1006,5L2g5Li65L2V5a6M5YWo6YO95rKh5raI5oGvLOaIkeWwseWDj+S4gOWPquicguaJ
vuS4jeWIsOicguicnCzlsIbov4fljrvkuIDlvKDkuIDlvKDnmoTmkpUs6L+Z5pel
5Y6G6KaB5pKV5Yiw5L2V5pe2LOaJjeacieS9oOeahOWtlw==,21B75B384D89E976915BEF98F40729FE,3,1,Y2hlbmd6aGl0aWFueWFuZw==,20120801000000,CZTY001,20120730125455,2,0,5LiN6ZmQ,,,0,CZTY,20

110000036,1,20120801114729,1017,57Sn5oCl6YCa55+l77ya5oiR6KaB5LiN5oOc5LiA5YiH5Luj5Lu35YG35Yiw5L2g
[witzzy@zzysvr1 zzynode]$
-无-为- 2013-05-09
  • 打赏
  • 举报
回复
真正的原因是“ oracle中使用base64编码时是每64个字符添加一个回车换行,不足64个字符的就不会添加回车换行。”

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧