精确字符串匹配存储函数始终返回False,求技术协助
问题解决
你的存储函数始终返回False的核心问题是调用方式错误:MySQL中存储函数需要用SELECT语句调用,而不是CALL(CALL仅用于存储过程)。
除此之外,还有几个可以优化和排查的点:
- 确认
general_ledger_accounts表中account_description列的字符串是否和传入的参数完全匹配(包括大小写、前后空格),如果存在空格干扰可以用TRIM()函数处理 - 可以简化函数逻辑,直接返回
EXISTS()的结果,无需额外的IF判断
修正后的代码如下:
USE ap; DROP FUNCTION IF EXISTS test_glaccounts_description; DELIMITER // CREATE FUNCTION test_glaccounts_description ( account_description_param VARCHAR(50) ) RETURNS BOOLEAN DETERMINISTIC BEGIN -- 直接返回存在性检查结果,同时处理可能的前后空格 RETURN EXISTS( SELECT account_number FROM general_ledger_accounts WHERE TRIM(account_description) = TRIM(account_description_param) ); END// DELIMITER ; -- 正确调用方式 SELECT test_glaccounts_description('Accounting');
你也可以先单独执行以下查询验证数据是否存在,排查数据匹配问题:
SELECT account_number FROM general_ledger_accounts WHERE account_description = 'Accounting';
如果这个查询能返回结果,修正调用方式后函数就会返回True。
内容的提问来源于stack exchange,提问作者Cloud_Envy
相关产品推荐
相关产品推荐

