【发布时间】:2022-01-12 22:18:39
【问题描述】:
我正在尝试更新数据库中的值,但也想设置一个局部变量VAR_IS_RATE_LIMITED。这样做的原因是因为我不想使用 select 语句并希望在一个语句中执行它。如何设置VAR_IS_RATE_LIMITED?我查看了其他问题,但他们的 CASE 语句没有嵌入到更新语句中。
DELIMITER //
CREATE FUNCTION F_RATE_LIMITED(P_IP varchar(45),
P_MAX_RATE int unsigned
)
RETURNS INT UNSIGNED
BEGIN
DECLARE VAR_IS_RATE_LIMITED INT UNSIGNED DEFAULT 0;
INSERT INTO rate_limit (ip, rate)
VALUES (P_IP, 1)
ON DUPLICATE KEY UPDATE
rate =
CASE
WHEN (rate + 1) > P_MAX_RATE THEN
SET VAR_IS_RATE_LIMITED = 1;
rate
ELSE
rate + 1
END;
RETURN VAR_IS_RATE_LIMITED;
END; //
DELIMITER ;
【问题讨论】:
-
很遗憾,你不能这样做,它不能那样工作,你不能在
update语句中设置变量。 -
@Stu 在不使用 select 语句的情况下,有什么解决方案可以解决我想要做的事情吗?本质上,我想要的是,如果您超过了速率,我希望函数返回 1。