Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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 如果条件在存储过程中不起作用_Mysql_Sql_Stored Procedures - Fatal编程技术网

Mysql 如果条件在存储过程中不起作用

Mysql 如果条件在存储过程中不起作用,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我想运行一个存储过程,前提是它满足IF条件,但这个条件一直失败。它总是返回错误。在我的数据库中,@count_log应该返回0。如果我硬编码@count_log等于0,它就会工作。下面是我的代码。请问有什么问题 CREATE DEFINER=`root`@`localhost` PROCEDURE `approve`(IN `userID` INT, IN `logID` INT, OUT `res` INT) BEGIN DECLARE count_log INT; decla

我想运行一个存储过程,前提是它满足IF条件,但这个条件一直失败。它总是返回错误。在我的数据库中,@count_log应该返回0。如果我硬编码@count_log等于0,它就会工作。下面是我的代码。请问有什么问题

CREATE DEFINER=`root`@`localhost` PROCEDURE `approve`(IN `userID` INT, IN `logID` INT, OUT `res` INT)
BEGIN
    DECLARE count_log INT;
    declare exit handler for sqlexception
    BEGIN
        -- ERROR 
        rollback;
    END;

    declare exit handler for sqlwarning
    BEGIN
        -- warning -
        rollback;
    END;
        SET @count_log = (SELECT COUNT(*) FROM Logs WHERE logId = logID); 
        -- Confirm has not been treated -- 

        IF(@count_log = 0) THEN

        START transaction;
            -- Update table

        COMMIT;
        SELECT FOUND_ROWS() INTO res;
       END IF;

    END
如果

这对于每一行都是正确的,所以只要日志中有任何记录,就从日志中选择COUNT*,其中logId=logId将返回大于0的值

您的意思可能是将表的列与传递的同名参数进行比较。尝试用表名限定其中一个。由于参数优先,这意味着限定的一个解析为表列,另一个解析为参数

(SELECT COUNT(*) FROM Logs WHERE Logs.logId = logID)
或者重命名参数

(SELECT COUNT(*) FROM Logs WHERE Logs.logId = logID)
有关优先级的详细信息,请参见:

例程参数优先于表列。
您的参数名称与@sticky_bit描述的参数名称冲突。只需使用更好的命名约定:

CREATE DEFINER=`root`@`localhost` PROCEDURE `approve`(
    IN in_userID INT,
    IN in_logID INT,
    OUT out_res INT
)
BEGIN
    DECLARE v_count_log INT;
    . . .
    SELECT v_count_log := COUNT(*)
    FROM Logs l
    WHERE l.logId = in_logID; 

    . . .
END;

您是否尝试打印@count_log值,如果是,则返回什么?