为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:
【CPU】:
【问题描述】*:SQL Error: -6116, SQLState: 22000
[2a69e20d7080483d8572d0e526bbfa99]-2024-12-18 10:08:20.636 ERROR 23724 --- [nio-9110-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper : 第1 行附近出现错误:
无法比较的数据类型
[2a69e20d7080483d8572d0e526bbfa99]-2024-12-18 10:08:20.648 ERROR 23724 --- [nio-9110-exec-8] c.c.u.c.core.error.ExceptionTranslator : 服务器异常
org.springframework.dao.DataIntegrityViolationException: could not prepare statement; SQL [select * from t_position where permission_level_code in (?) and view_sight_type='ALL' union select * from t_position where permission_level_code =? union select * from t_position where id in (?) union select * from t_position where permission_level_code =? ]; nested exception is org.hibernate.exception.DataException: could not prepare statement
出于性能考虑默认禁止大字段的比较!
表
t_position
大概率是有text或者clob的字段类型吧,注意看看表定义。这个SQL都是查一个表不同条件而已,
首选建议改写SQL:
select * from t_position where ( permission_level_code in (?) and view_sight_type='ALL' ) or ( permission_level_code =?) or ( id in (?) ) or ( permission_level_code =? )
其次,不建议的方案是调整数据库参数开启大字段比较(我看平台上大都是这么回答,确实可行,但是“鱼和熊掌不可兼得”的做法,如果大字段列很长就是在埋雷)
sp_set_para_value(1,'ENABLE_BLOB_CMP_FLAG',1)