为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: 1-1-190-21.04.02-137571-ENT Pack3
【操作系统】:Windows 2012 Server
【CPU】: X64
【问题描述】*:因业务需要,拟替换LongVarchar大文本字段中的ID(OldId-->NewId),但执行replace替换报错(-6108: 字符串截断),SQL如下:
-- 说明:字段Layout为longvarchar类型
update Form set
Layout = replace(Layout, 'AADC013DD9F06938462B7A2CBC4E9A45', '198BB08E0258A1CDB1280DA3')
where
locate('AADC013DD9F06938462B7A2CBC4E9A45', Layout) > 0
;
Layout是longvarchar字段,replace工作正常,locate执行失败。例子为:
-- 说明:字段Layout为longvarchar类型
update Form set
Layout = replace(Layout, 'AADC013DD9F06938462B7A2CBC4E9A45', '198BB08E0258A1CDB1280DA3')
where
-- 加上locate条件,则:-6108: 字符串截断
-- 去掉locate条件,则没有报错
locate('AADC013DD9F06938462B7A2CBC4E9A45', Layout) > 0
and
operid = '198BB08E0258A1CDB1280DA0'
;
locate函数的用法到底有什么讲究?
补充:length(layout)=172143
1-1-190-21.04.02-137571,这个版本locate函数不支持Clob/Text;最新版20230417,已经支持!对于老版本,可改用dbms_lob.instr
已初步定位问题,是locate函数报出的错误,如下:
但locate函数说明,是支持Text的: