在DM8上对大字段类型列进行排序、分组等操作时,会报错-2685:试图在blob或者clob列上排序或比较
。
create table T (ID int ,C1 TEXT);
INSERT INTO T VALUES(1,'新华社北京12月5日电 题:步履坚定,共绘高质量发展新篇章——各地贯彻党的十九届六中全会精神纪实
新华社记者
发展,是解决一切问题的总钥匙。
党的十九届六中全会审议通过《中共中央关于党的百年奋斗重大成就和历史经验的决议》强调,必须实现创新成为第一动力、协调成为内生特点、绿色成为普遍形态、开放成为必由之路、共享成为根本目的的高质量发展。
近日新华社记者奔赴多地,到企业车间、基层一线、群众当中,亲历贯彻全会精神的火热气象,感受落实新发展理念蔚然成风。
提质增效,跃上发展新台阶
走进济钢集团,黑色钢铁已不见踪影。36岁的技术人员陈书超身着白大褂,正操作数控机床加工直径几微米的精密零部件。
对于转型发展,他有着切身收获:“企业从‘靠钢吃饭’到‘无钢发展’,我的工作也从铸造‘大黑粗’变成加工‘高精尖’,环境好了,收入也高了。”
2017年,有着60年历史的济钢关停全部钢铁生产线。如今,济钢度过转型阵痛,向新材料、高端装备制造转型。2021年,集团产值预计和退出钢铁产能前相当,但能耗、大气污染物排放均只有以前的“零头”。
“要努力提升技能,适应企业转型的新需要,以实际行动响应全会关于推动高质量发展的号召。”陈书超说。');
COMMIT;
SQL语句如下:
select c1,count(*) from T group by c1;
SELECT ID,C1 FROM T ORDER BY C1;
可以观察到,对C1列进行排序和排序操作均报错"[-2685]:试图在blob或者clob列上排序或比较."
将数据库参数ENABLE_BLOB_CMP_FLAG设置为1后,数据库支持DISTINCT、ORDER BY、分析函数和集函数支持对大字段进行处理。
ENABLE_BLOB_CMP_FLAG: 是否支持大字段类型的比较。0:不支持;1:支持。设置为1后支持DISTINCT、ORDER BY、分析函数和集函数支持对大字段进行处理。
注意:该参数并不能支持GROUP BY 对大字段进行处理。
1、将ENABLE_BLOB_CMP_FLAG参数设置为1
sp_set_para_value(1,'ENABLE_BLOB_CMP_FLAG',1);
2、新开会话,执行order by SQL语句
3、执行group by SQL语句
group by 语句还是会报错,报错信息为"[-6116]:无法比较的数据类型."
所以设置ENABLE_BLOB_CMP_FLAG为1,并不能解决GROUP BY语句报错的问题。
通过上面测试,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);
可以观察到,通过CAST将大字段列转换为字符串类型之后,ORDER BY 、GROUP BY 操作均可以执行。
DBMS_LOB.SUBSTR函数对CLOB或者TEXT类型,返回的结果为字符串类型,具体细节请参考《DM8 系统包使用》。
SQL语句如下:
SELECT ID,DBMS_LOB.SUBSTR(C1) FROM T ORDER BY DBMS_LOB.SUBSTR(C1);
select DBMS_LOB.SUBSTR(C1),count(*) from T group by DBMS_LOB.SUBSTR(C1);
可以观察到,使用DBMS_LOB.SUBSTR函数后,对于ORDER BY 、GROUP BY 操作均可以执行。
1、使用第一种方法,修改数据库参数的方式,无法支持GROUP BY 对大字段的处理。
2、使用第二种方法,通过转换大字段类型为字符串类型可以达到相应的效果,但是如果大字段的内容长度比较长超过32767,内容会自动截断。
文章
阅读量
获赞