我有一个仓库系统,您可以在其中插入或删除具有条形码和计数编号的产品。现在,我想在执行事务之前先检查库存中是否有足够的产品。例如:如果库存中有足够的产品,则插入事务,否则不显示任何内容(或显示错误)
我试过这段代码:
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语句?
我知道我可以先执行一条select语句,比较这些值,然后插入事务(使用MySQL beginTransaction和commit),但我非常确定必须有另一种方法。(当我谈论事务时,我不是谈论来自MySQL的事务,而是来自我的数据库的事务)
谢谢
发布于 2019-12-19 22:37:31
我还没有对此进行测试,但它应该可以完成工作。
在TSQL中,您可以将IF和IIF分开,IIF仅在SELECT语句中使用(作用与您使用的CASE相同),而IF用作标准的IF (与任何其他语言一样)。在MySQL中,这两个是相同的,只是IF(或者在你的例子中SELECT语句中的CASE ),在这种情况下,为了得到你想要的结果,下面的代码应该可以工作:
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; https://stackoverflow.com/questions/59411743
复制相似问题