当前位置: 代码迷 >> Oracle开发 >> sqlplus linesize 32767 怎么突破
  详细解决方案

sqlplus linesize 32767 怎么突破

热度:549   发布时间:2016-04-24 06:31:00.0
sqlplus linesize 32767 如何突破
本帖最后由 totola147 于 2014-10-31 01:19:57 编辑
现在有一个抽数的SQL语句在unix环境下的sqlplus中执行,因为目标表有14个varchar2(4000),并且还都挺长的 ,导致结果超过单行的最大限度32767 

这个问题大家有什么办法解决

已否定方案:
1 对表做垂直分隔,分别卸载
否定原因
a 垂直分隔首先涉及到分几份,在哪分,如何分;因为数据文件字段是有次序要求的,这样导致垂直分隔卸载的复杂度提升
b 分割后如何合并,为了保证合并时不会错位,分割时都必然要带主键,全表卸数,加order by 排序会导致性能损失,不排序导致文件合并时复杂且低效;同时分别卸数还得保证两个查询查到的是“相同的”结果,但是生产环境很难保证在异步执行不同的SQL时记录没有发生变化,所以为了保证无变化,又得先把记录放到临时表,这样又是性能损耗



备注:之所以没有用exp直接导表,是因为是抽数,非全字段,并且对个别字段有做格式处理
环境不提供datastage
------解决思路----------------------
32767不是linesize的限制吧,是varchar2类型的上限,你导出时是不是把字符串都用
------解决思路----------------------
连接起来了?
------解决思路----------------------
引用:
Quote: 引用:

32767不是linesize的限制吧,是varchar2类型的上限,你导出时是不是把字符串都用
------解决思路----------------------
连接起来了?


1 varchar2 的上限是4000
2 确实是
------解决思路----------------------
连起来了
3 linesize的上限确实是32767 (验证方法,打开sqlplus 执行命令  set linesize 40000)

varchar2做为数据库表的字段时上限是4000
在pl/sql语句中上限是32767
如果你使用
------解决思路----------------------
连接的字符串长度超过32767就会出错,和linesize没啥关系
  相关解决方案