MySQL存储函数是';t返回正确的值
为什么MySQL 1中的MySQL存储函数是';t返回正确的值,mysql,sql,stored-procedures,sql-function,stored-functions,Mysql,Sql,Stored Procedures,Sql Function,Stored Functions,为什么MySQL 1中的SELECT语句返回正确的结果,而MySQL 2中存储函数中的相同SELECT语句返回表a中最新行的id?我尝试用实际使用的值替换存储函数中的参数,但它仍然返回表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
语句返回正确的结果,而MySQL 2中存储函数中的相同SELECT
语句返回表a
中最新行的id
?我尝试用实际使用的值替换存储函数中的参数,但它仍然返回表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 ;
指定与列名不同的参数值,否则它们是不明确的
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 ;