Informix函数中LIKE运算符参数传递方法及无结果问题排查
在Informix函数中使用LIKE运算符传递参数的解决方案
我来帮你理清这个问题,先看看你代码里的核心问题,再给你正确的实现方式:
你的函数无结果的原因
在WHERE vendor_desc like 'vv_vendor_desc'这行代码里,你把参数名用单引号括起来了——这会让Informix把它当成固定的字符串字面量,也就是它在找vendor_desc完全等于vv_vendor_desc的记录,而不是使用你传入的参数值做模糊匹配。这就是为什么得不到预期结果的关键原因。
正确的LIKE参数传递方式
根据需求不同,有两种常见的正确写法:
场景1:参数本身已包含通配符
如果调用函数时,传入的参数已经带了%或_这类通配符(比如用户传入%科技%),直接引用参数即可,不需要加单引号:
WHERE vendor_desc LIKE vv_vendor_desc
场景2:函数内部自动添加通配符
如果希望不管用户传入什么值,都自动实现前后模糊匹配,需要用Informix的字符串拼接运算符||来组合参数和通配符:
WHERE vendor_desc LIKE '%' || vv_vendor_desc || '%'
修正后的完整函数示例
CREATE FUNCTION neura_omega_stg.grn_vendor_name_search(vv_vendor_desc Varchar(50)) RETURNING Varchar(15),Varchar(100); DEFINE v_vendor_id VARCHAR(15); DEFINE v_vendor_desc VARCHAR(100); FOREACH cursor1 FOR SELECT vendor_id,vendor_desc INTO v_vendor_id,v_vendor_desc FROM master_vendor_tbl -- 这里用内部添加通配符的方式,实现前后模糊匹配 WHERE vendor_desc LIKE '%' || vv_vendor_desc || '%' RETURN v_vendor_id,v_vendor_desc WITH RESUME; END FOREACH; END FUNCTION;
额外注意事项
- 如果你需要前缀匹配(比如
科技%)或后缀匹配(比如%科技),只需要调整通配符的位置即可; - 确保参数和变量的命名不要冲突(你的代码里参数是
vv_vendor_desc,变量是v_vendor_desc,这点处理得没问题); - 注意
Varchar的长度限制,避免拼接后的字符串超出字段允许的长度。
内容的提问来源于stack exchange,提问作者Shangeetha
相关产品推荐
相关产品推荐

