MySQL 函数参数在选择语句的 where 条件下不起作用


DELIMITER $$
CREATE DEFINER=`axistms`@`localhost` FUNCTION `CheckDoc`(`orderId` INT) RETURNS int(11)
DETERMINISTIC
BEGIN
DECLARE lvl int;
SELECT count(`id`) INTO lvl FROM `com_carrier_portal_upload_documents` WHERE `orderID`= orderId;
RETURN lvl;
END$$
DELIMITER ;

任何订单 ID 都通过 orderId 参数传递,它不会影响 where 条件。始终返回所有记录的计数。如何解决这个问题?

我建议您重命名存储过程参数,做这样的事情 -

CREATE DEFINER = `axistms`@`localhost` FUNCTION `CheckDoc` (orderIdParam int)
RETURNS int(11)
DETERMINISTIC
BEGIN
DECLARE lvl int;
SELECT
COUNT(`id`) INTO lvl
FROM `com_carrier_portal_upload_documents`
WHERE `orderID` = orderIdParam;
RETURN lvl;
END

。因为 WHEREorderID= orderId 可以等于 WHERE true。

最新更新