Firebird EXECUTE BLOCK用LIKE查询报-811单行选择多行错误如何解决
问题原因
你遇到的报错核心由语法错误导致:
- LIKE 后的匹配模式属于字符串字面量,必须用单引号包裹,你当前代码里的
%test12%缺少单引号,触发SQL解析逻辑异常,无法正确识别FOR SELECT的游标查询逻辑,才会误报单行查询返回多行的-811错误。 - 部分低于3.0的Firebird版本对BLOB SUB_TYPE TEXT类型字段直接使用LIKE匹配的支持不完善,若修复引号后仍有异常,可增加CAST转换适配。
修复后代码
EXECUTE BLOCK RETURNS (ID Varchar(128), SCRIPT BLOB SUB_TYPE TEXT) AS BEGIN FOR SELECT Col1.EID, Col1.Script FROM Col1 WHERE Col1.Script Like '%test12%' INTO :ID, :SCRIPT DO BEGIN SUSPEND; END END
低版本兼容写法(替换WHERE条件即可):WHERE CAST(Col1.Script AS VARCHAR(8191)) LIKE '%test12%'
内容的提问来源于stack exchange,提问作者scotti8
相关产品推荐
相关产品推荐

