MySQL 存储函数没有返回正确的值

MySQL stored function isn't returning the correct value

为什么 MySQL 中的 SELECT 语句 1 return 结果正确,而 SELECT 中的语句相同MySQL 2 return table_a 中最新行的 id 存储函数?我尝试用实际使用的值替换存储函数中的参数,它仍然 returned table_a.

中最新行的 id

MySQL 1

USE `schema_a`;

SELECT `id`
FROM `table_a` 
WHERE `name` = 'AAA' 
AND `type_id` = 1 
AND `active` = 1 
ORDER BY `created_on` DESC
LIMIT 1;

SELECT `id`
FROM `table_a`
WHERE `name` = 'BBB'
AND `type_id` = 1
AND `active` = 1
ORDER BY `created_on` DESC
LIMIT 1;

SELECT `id`
FROM `table_a`
WHERE `name` = 'CCC'
AND `type_id` = 2
AND `active` = 1
ORDER BY `created_on` DESC
LIMIT 1;

MySQL 2

USE `schema_a`;

DROP FUNCTION IF EXISTS `test`;

DELIMITER //

CREATE FUNCTION `test`(name VARCHAR(255), type_id INT, active TINYINT)
    RETURNS INT
    NOT DETERMINISTIC
    READS SQL DATA
    BEGIN
        RETURN
        (SELECT `id`
        FROM `table_a`
        WHERE `name` = name
        AND `type_id` = type_id
        AND `active` = active
        ORDER BY `created_on` DESC
        LIMIT 1);
    END //

DELIMITER ;

SELECT `test`('AAA', 1, 1);
SELECT `test`('BBB', 1, 1);
SELECT `test`('CCC', 2, 1);

给参数取与列名不同的值,否则有歧义。

DELIMITER //

CREATE FUNCTION `test`(p_name VARCHAR(255), p_type_id INT, p_active TINYINT)
    RETURNS INT
    NOT DETERMINISTIC
    READS SQL DATA
BEGIN
        RETURN
        (SELECT `id`
        FROM `table_a`
        WHERE `name` = p_name
        AND `type_id` = p_type_id
        AND `active` = p_active
        ORDER BY `created_on` DESC
        LIMIT 1);
END //

DELIMITER ;