您的代码有几个问题:
- 您必须使用
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)
(并遵循您的代码逻辑,您应该有这样的约束),您现在可以将整个事情归结为一个插入语句INSERT INTO ... ON DUPLICATE KEY UPDATE
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
块和更改分隔符。
显然,如果您需要,您可以完全退出存储过程并自行使用此类插入语句。
这是SQLFiddle演示