该问题跟 CLOB_LIKE_MAX_LEN 参数有关,CLOB_LIKE_MAX_LEN 参数限制 LIKE 语句中CLOB类型的最大长度,单位KB,有效值范围(8~102400)默认值为31K(DM8中默认值为10240)
示例
数据库字符集为GB18030
创建包含CLOB字段的测试表
SQL> create table test(info clob);
操作已执行
插入一条32k长度的数据
SQL> insert into test select repeat('一二三四五',3276)||repeat('1',7);
影响行数 1
SQL> commit;
操作已执行
SQL> select lengthb(info) from test;
行号 LENGTHB(INFO)
---------- -------------
1 32767
查看当前 CLOB_LIKE_MAX_LEN 参数值
SQL> select para_name,para_value from v$dm_ini where para_name ='CLOB_LIKE_MAX_LEN';
行号 PARA_NAME PARA_VALUE
---------- ----------------- ----------
1 CLOB_LIKE_MAX_LEN 31
对该数据进行模糊查询,由于表中数据长度为32k超过CLOB_LIKE_MAX_LEN参数31k的限制,因此会报字符串截断的错误
将 CLOB_LIKE_MAX_LEN 参数设置成32
SQL> sp_set_para_value(2,'CLOB_LIKE_MAX_LEN',32);
DMSQL 过程已成功完成
由于是静态参数,需重启数据库使参数生效
再次查询该参数,已经更新为32
SQL> select para_name,para_value from v$dm_ini where para_name ='CLOB_LIKE_MAX_LEN';
行号 PARA_NAME PARA_VALUE
---------- ----------------- ----------
1 CLOB_LIKE_MAX_LEN 32
再次执行模糊查询
可以匹配到结果。
CLOB_LIKE_MAX_LEN参数在DM8中默认值已经改为10240,很少会遇到clob做模糊查询导致字符集截断的场景了。