Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL存储函数是';t返回正确的值_Mysql_Sql_Stored Procedures_Sql Function_Stored Functions - Fatal编程技术网

MySQL存储函数是';t返回正确的值

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;

为什么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 `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 ;