前言
今天将项目连接达梦8数据库,发现突然之间报了个错,错误如下:
而且经过我的测试,不光是DM8有这个问题,DM7也未能幸免。
原因
这个问题的原因其实就是我们对达梦库中设置了blob或clob类型的字段进行了排序或者分组操作。
解决办法
1、修改数据库参数ENABLE_BLOB_CMP_FLAG
将数据库参数ENABLE_BLOB_CMP_FLAG设置为1后,数据库支持DISTINCT、ORDER BY、分析函数和集函数支持对大字段进行处理。
ENABLE_BLOB_CMP_FLAG:是否支持大字段类型的比较。0:不支持;1:支持。设置为1后支持DISTINCT、ORDER BY、分析函数和集函数支持对大字段进行处理。
注意:该参数并不能支持GROUP BY 对大字段进行处理。
执行语句:
sp_set_para_value(1,'ENABLE_BLOB_CMP_FLAG',1);
此时就可以对大字段类型进行排序了,但分组操作还是不行。
2、将大字段类型转换为字符串类型
通过上面测试,GROUP BY 无法通过修改ENABLE_BLOB_CMP_FLAG参数来支持,所以需要将对应的大对象列转换为字符串类型进行处理。
SQL语句如下:
SELECT ID,CAST(C1 AS VARCHAR) FROM T ORDER BY CAST(C1 AS VARCHAR);
SELECT CAST(C1 AS VARCHAR), COUNT(*) FROM T GROUP BY CAST(C1 AS VARCHAR);
限制条件
1、使用第一种方法,修改数据库参数的方式,无法支持GROUP BY 对大字段的处理。
2、使用第二种方法,通过转换大字段类型为字符串类型可以达到相应的效果,但是如果大字段的内容长度比较长超过32767,内容可能会自动截断。