mysql如果语法错误

时间:2013-07-18 05:05:03

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

我正在尝试在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晚试图找到错误,你的意识比我使用它的程序更好,再次感谢!

1 个答案:

答案 0 :(得分:2)

您的代码存在一些问题:

  1. 您必须使用CREATE PROCEDURE而非CREATE;
  2. 您的UPDATE语法错误。 SETWHERE子句之前。
  3. 您需要更改DELIMITER
  4. 尝试

    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块并更改分隔符。

    显然,如果你需要,你可以完全退出存储过程并单独使用这样的插入语句。

    这是 INSERT INTO ... ON DUPLICATE KEY UPDATE 演示