【发布时间】:2020-05-25 09:42:52
【问题描述】:
我正在编写一个存储过程,我必须更新一定数量的特定产品(显然我可以增加或减少它)。由于唯一的区别是运算符值( + 或 - )我想在这两种情况下使用相同的过程。我知道这个问题已经在这里得到了回答 - Execute mathematical expression and set the value to variable in SQL ,但这对我没有帮助,因为他们是用 MSSQL 编写的。任何人都知道我怎么能在MYSQL中做到这一点?是不是,如果我用MYSQL写,下面的代码是最好的解决方案?
BEGIN
SET @foundID = -1,@name=name, @company=company;
SET @number=number, @action=plusMinus;
CALL spCheckIfProductExists(@name,@company,@foundID);
IF (@foundID != -1 AND (@action='+' OR @action='-'))
THEN SET @sql = concat("UPDATE instock SET quantity = quantity",@action , " @number WHERE productid= @foundID");
PREPARE update_statement FROM @sql;
EXECUTE update_statement;
DEALLOCATE PREPARE update_statement;
END IF;
END
这是一个有效的代码,但我知道在编写动态存储过程时连接字符串是一种非常糟糕的做法。任何想法如何改进它?
【问题讨论】:
-
UPDATE table SET value = value + ((condition) * 2 - 1) * delta,其中condition是您的布尔表达式。如果condition为TRUE,则将其视为1,您将获得UPDATE table SET value = value + delta。如果condition为FALSE,则视为0,得到UPDATE table SET value = value - delta。