MySQL限制中的变量

MySQL限制中的变量,mysql,Mysql,我想在MySQL limit中使用变量,但它无效。为什么? (如果我将变量改为数字,就可以了。) 我的代码: DELIMITER // CREATE PROCEDURE `deleteOldErrRecords`(backTime int(11), leaveErr int(11)) BEGIN SELECT @records:=COUNT(*) FROM `sys_proc_err`; IF @records > leaveErr THEN

我想在MySQL limit中使用变量,但它无效。为什么? (如果我将变量改为数字,就可以了。)

我的代码:

DELIMITER //
    CREATE PROCEDURE `deleteOldErrRecords`(backTime int(11), leaveErr int(11))
    BEGIN
      SELECT @records:=COUNT(*) FROM `sys_proc_err`;
      IF @records > leaveErr THEN
        SELECT @actRecords:=COUNT(*) FROM `sys_proc_err` WHERE `time` > (NOW()-backTime); 
        IF @actRecords > leaveErr THEN
          DELETE FROM `sys_proc_err` WHERE `time` < (NOW()-backTime);
        ELSE
          DELETE FROM `sys_proc_err` ORDER BY `id` ASC LIMIT @records-leaveErr;
        END IF;
      END IF;
    END //
DELIMITER ;
分隔符//
创建过程“deleteOldErrRecords”(backTime int(11),leaveErr int(11))
开始
从'sys\u proc\u err'中选择@records:=COUNT(*);
如果@records>leaveErr,则
从'sys\u proc\u err`WHERE`time`>(NOW()-backTime)中选择@actRecords:=COUNT(*);
如果@actRecords>leaveErr,则
从'sys\u proc\u err'中删除,其中'time'<(NOW()-backTime);
其他的
通过'id'ASC LIMIT@records leaveErr'从'sys\u proc\u err'订单中删除;
如果结束;
如果结束;
结束//
定界符;

仅支持将变量用于极限值

仅支持将变量用于限制值

如果您没有MySQL 5.5.6+,您可以在中找到许多解决方法。如果您没有MySQL 5.5.6+,您可以在中找到许多解决方法。
DELIMITER //
    CREATE PROCEDURE `deleteOldErrRecords`(backTime int(11), leaveErr int(11))
    BEGIN
      SELECT @records:=COUNT(*) FROM `sys_proc_err`;
      IF @records > leaveErr THEN
        SELECT @actRecords:=COUNT(*) FROM `sys_proc_err` WHERE `time` > (NOW()-backTime); 
        IF @actRecords > leaveErr THEN
          DELETE FROM `sys_proc_err` WHERE `time` < (NOW()-backTime);
        ELSE
          DELETE FROM `sys_proc_err` ORDER BY `id` ASC LIMIT @records-leaveErr;
        END IF;
      END IF;
    END //
DELIMITER ;