MySQL自定义函数IF NOT判断记录不存在失效返回旧ID问题
MySQL自定义函数跨表ID关联逻辑异常
问题描述
尝试编写MySQL自定义函数实现跨表ID关联逻辑,开发时先通过SELECT语句将db_test.sub表中匹配detail字段的sub值存入用户变量@gender_id:
- 若传入的
gender参数在表中不存在,返回对应值不存在的提示 - 若参数存在,返回拼接的存在提示与匹配到的ID值
实际运行逻辑出现异常:传入不存在的查询参数(如'wowwowowow')时,IF NOT判断未触发不存在分支,函数直接返回上一次成功查询留存的@gender_id值,例如之前查询'male'得到ID为7,传入不存在参数时也会错误返回ID 7。
函数代码
DELIMITER && CREATE FUNCTION db_test.test_function_9( gender VARCHAR( 255 ) ) RETURNS VARCHAR( 255 ) BEGIN IF NOT ( ( SELECT @gender_id := sub FROM db_test.sub WHERE detail = gender ) ) THEN BEGIN RETURN CONCAT( 'Does not exists: ', gender ); END; ELSE BEGIN RETURN CONCAT( 'Exists and is: ', gender, ' ' ,@gender_id ); END; END IF; END &&
测试用例与返回结果
测试存在值
'male':
执行语句:SET @response = db_test.test_function_9( 'male' ); SELECT @response;返回结果:
Exists and is: male 7,结果符合预期。测试不存在值
'wowwowowow'(预期返回不存在提示):
执行语句:SET @response9 = db_test.test_function_9( 'wowwowowow' ); SELECT @response9;实际返回:
Exists and is: wowwowowow 7,结果异常。测试存在值
'female':
执行语句:SET @response9 = ''; SET @response9 = db_test.test_function_9( 'female' ); SELECT @response9;返回结果:
Exists and is: female 8,结果符合预期。
补充说明
如果不使用NOT关键字,函数逻辑可以正常运行,希望精简代码,避免编写过多冗余逻辑。
内容的提问来源于stack exchange,提问作者lskrieqaoeuaoeu
相关产品推荐
相关产品推荐

