>我有一个仓库系统,您可以在其中插入或取出带有条形码和计数号的产品。现在我想先检查库存中是否有足够的产品,然后再执行交易。所以像这样:如果库存中有足够的产品,然后插入交易,否则不做任何事情(或显示错误(
我尝试了以下代码:
SELECT CASE WHEN 7 <= (SELECT i.count FROM inventory i WHERE barcode = '123')
THEN
INSERT INTO transactions
(companyid,barcode,fromlocation,tolocation,count)
VALUES (1,'123','Warehouse','Factory',7)
END
但它说:
1. Unexpected keyword. (near "INTO" at position 88)
2. Unexpected end of CASE expression (near " " at position 87)
3. Unrecognized keyword. (near "END" at position 198)
所以显然这是错误的语法,但我到处搜索,找不到提供这种情况的 if 语句。
有人可以告诉我如何写正确的if语句吗?
我知道我可以先做一个选择语句,比较值,然后插入事务(使用 MySQL beginTransaction 并提交(,但我很确定必须有另一种方法。(当我谈论事务时,我不谈论来自MySQL的事务,而是来自我的数据库的事务(
谢谢
我还没有测试过这个,但它应该可以完成工作。
在 TSQL 中,您将具有IF
和IIF
的分离,IIF
仅在SELECT
语句中使用(与您使用的CASE
相同(,IF
用作标准 IF(与任何其他语言一样(。在MySQL中,这两者是相同的,只需IF
(或在您的示例中CASE
在SELECT
语句中(,在这种情况下,为了获得您想要的结果,以下代码应该可以工作:
DELIMITER $$
CREATE PROCEDURE test()
BEGIN
IF 7 <= (SELECT i.count FROM inventory WHERE barcode = '123') THEN
INSERT INTO transactions
(companyid,barcode,fromlocation,tolocation,count)
VALUES (1,'123','Warehouse','Factory',7);
END IF;
END$$
DELIMITER ;
CALL test;