DM数据库SQL报错之字符串截断
本文于 16 天前发布,最后更新于 10 天前

一、问题描述

在达梦数据库中报错字符串截断存在多种情况,报错原因不一。

二、问题解决

2.1 大字段模糊查询

当查询条件中字段为TEXT,并进行LIKE模糊查询时报错。

报错原因是因为存在隐式转换,转换时截断而导致报错。

解决方法一

首先,查看一下该大字段长度

SELECT DBMSLOB.GETLENGTH(字段);

再根据长度尝试修改参数CLOB_LIKE_MAX_LEN【静态参数】的值,并重启数据库。

CLOB_LIKE_MAX_LEN:LIKE 语句中 CLOB 类型的最大长度,单位 KB,取值范围 8~102400。

修改SQL

SP_SET_PARA_VALUE(2, 'CLOB_LIKE_MAX_LEN', 20480);
--或者
ALTER SYSTEM SET 'CLOB_LIKE_MAX_LEN' = 20480 SPFILE;

解决方法二

通过包的方法DBMS_LOB.SUBSTR可以避免报错

SELECT 1 WHERE DBMS_LOB.SUBSTR(TEXT_COLUMN) LIKE '%XXX%';

2.2 WM_CONCAT/LISTAGG 拼接

当使用WM_CONCAT/LISTAGG进行字符串拼接,拼接太多时报错。

报错原因是因为WM_CONCAT/LISTAGG函数返回类型为VARCHAR类型,所以有截断的可能。

解决方法一

使用LISTAGG2集函数替换WM_CONCAT/LISTAGG函数

SELECT LISTAGG2(NAME, ', ') WITHIN GROUP (ORDER BY NAME) AS "拼接结果" FROM PRODUCTION.PRODUCT;

注意
1.WM_CONCAT 也可以写成 WMSYS.WM_CONCAT
2.WM_CONCAT 和 LISTAGG 返回类型为 VARCHAR
3.LISTAGG2 返回类型为 CLOB

解决方法二

后续版本可以通过修改参数WM_CONCAT_LOB【静态参数】指定WM_CONCAT函数的返回值类型。0:VARCHAR 类型;1:CLOB 类型

修改SQL

SP_SET_PARA_VALUE(2, 'WM_CONCAT_LOB', 1);
--或者
ALTER SYSTEM SET 'WM_CONCAT_LOB' = 1 SPFILE;

静态参数,修改后需重启数据库生效。

三、补充

如再有其他情况报错:字符串截断。发现后即同步到该文章。

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇