问题描述:
在oracle中执行了一条关于wm_concat()函数的SQL,但是执行的结果却不一致。
在plsql工具中查询到的结果可以显示理想的结果(注意:虽然查询的结果字段类型是clob类型)。
在sqlplus中显示的结果却被截取了(注意:截取了前80个字符)。
在navicat中可以展示理想的结果。
分析过程:
1、首先检查所查询的数据库、用户、SQL等是否是一致的,已经确认是一致的排除SQL脚本错误的情况。
2、那么猜测原因出现在使用的工具上,plsql或navicat应该是对结果的展示做了处理。
3、观察分析到sqlplus查询结果只展示了前80个字符,并且所展示的部分是正确的,它只是截取了字段。所以猜测在底层处理上sqlplus已经得到了理想的结果,只是展示部分有问题,而且每行都是只展示了前80字符也是印证了这点。
4、sqlplus中show long得到的结果80(LONG {80(默认值)|n} 为显示和拷贝LONG类型值的最大宽度的设置. 对于ORACLE7, n的最大值为2G字节;对于版本6,最大值为32767),所以应该是sqlplus显示字段截取了前80字符。
5、sqlplus中set long 3000 正确显示理想结果。set longchunksize 2000;set linesize 2000可以调整输出结果的样式更理想。
参考:
SQLPlus中LONG参数的含义:
关于LONG这个参数,官方文档解释最大是2,000,000,000 bytes,如果结果集的类型是 LONG, BLOB, BFILE, CLOB, NCLOB , XMLType这些类型