【问题标题】:mysql if Syntax ERRORmysql if 语法错误
【发布时间】:2013-07-18 05:05:03
【问题描述】:

我正在尝试在 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

非常感谢彼得!有效!!!!我失去了 2 晚试图找到错误,你的想法比我使用它的程序更好,再次感谢!

【问题讨论】:

  • 错误信息是什么?

标签: mysql sql database stored-procedures if-statement


【解决方案1】:

你的代码有几个问题:

  1. 您必须使用CREATE PROCEDURE 而不仅仅是CREATE
  2. 您的UPDATE 语法错误。 SET 位于 WHERE 子句之前。
  3. 你需要改变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演示

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-16
    • 2015-06-02
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2016-05-23
    相关资源
    最近更新 更多