我正在尝试在mysql上创建一个程序,这不是太难,但是当使用“if”时,事情变得疯狂,它说有一个错误但我无法理解。在这里:
CREATE SP_Verify_DATE (IN comp INT,IN prod INT,IN qt INT)
BEGIN
SELECT COUNT(cd_compra) INTO @tes FROM produto_compra WHERE cd_produto=prod AND cd_compra=comp;
IF (@tes = 1) THEN
UPDATE produto_compra WHERE cd_produto=prod AND cd_compra=comp SET qt_produto = qt_produto + qt;
ELSE
INSERT INTO produto_compra VALUES(comp,prod,qt);
END IF;
END
非常感谢peterm!工作!!!!我失去了什么2晚试图找到错误,你的意识比我使用它的程序更好,再次感谢!
答案 0 :(得分:2)
您的代码存在一些问题:
CREATE PROCEDURE
而非CREATE
; UPDATE
语法错误。 SET
在WHERE
子句之前。DELIMITER
尝试
DELIMITER $$
CREATE PROCEDURE SP_Verify_DATE (IN comp INT, IN prod INT, IN qt INT)
BEGIN
SELECT COUNT(cd_compra)
INTO @tes
FROM produto_compra
WHERE cd_produto=prod
AND cd_compra=comp;
IF (@tes = 1) THEN
UPDATE produto_compra
SET qt_produto = qt_produto + qt
WHERE cd_produto=prod AND cd_compra=comp;
ELSE
INSERT INTO produto_compra VALUES(comp,prod,qt);
END IF;
END$$
DELIMITER ;
除此之外你的代码还可以。
这是 SQLFiddle 演示
现在你可以把整个事情归结为一个插入语句,如果你有或者你在(cd_produto, cd_compra)
上定义了一个唯一索引(并遵循代码的逻辑你应该有这样的约束)使用{{3语法
CREATE PROCEDURE SP_Verify_DATE (IN comp INT, IN prod INT, IN qt INT)
INSERT INTO produto_compra (cd_produto, cd_compra, qt_produto)
VALUES(comp, prod, qt)
ON DUPLICATE KEY UPDATE qt_produto = qt_produto + VALUES(qt_produto);
因为它是一个单语句SP,所以你甚至不需要使用BEGIN ... END
块并更改分隔符。
显然,如果你需要,你可以完全退出存储过程并单独使用这样的插入语句。