2017-04-14 63 views
0

我需要某人帮助试图弄清为什么这BEGIN尝试向我抛出一个错误?错误代码1064开始尝试

use my_guitar_shop; 
DROP PROCEDURE IF EXISTS update_product_discount; 
DELIMITER $$ 
CREATE PROCEDURE update_product_discount 
( 
    IN product_id INT, 
    IN discount_percent INT 
) 
BEGIN 
    BEGIN TRY 
     UPDATE products 
     SET discount_percent = discount_percent 
     WHERE product_id = product_id 
    END TRY; 
END; 
BEGIN CATCH 
    IF discount_percent < 0 THEN 
     SELECT 'The discount percent must be positive' AS message 
END CATCH; 
END $$ 


DELIMITER ; 
+0

请勿将变量名称与表格中的列名称相同。如果您的意思是传入的参数或表中的列,数据库引擎会感到困惑。一个很好的约定是P_IN_FieldName或P_OUT_Fieldname,所以你知道它是一个输入参数还是输出参数。 – xQbert

回答

0

您应该在尝试更新之前测试discount_percent。除非更新出现问题,否则不会失败并看到更新。

另外,不要使用与列名相同的名称作为变量。

use my_guitar_shop; 
DROP PROCEDURE IF EXISTS update_product_discount; 
DELIMITER $$ 
CREATE PROCEDURE update_product_discount 
( 
    IN this_product_id INT, 
    IN new_discount_percent INT 
) 
BEGIN 
    IF discount_percent < 0 THEN 
     BEGIN 
      SELECT 'The discount percent must be positive' AS message; 
     END 
    ELSE 
     BEGIN 
      BEGIN TRY 
       UPDATE products 
       SET discount_percent = new_discount_percent 
       WHERE product_id = this_product_id; 
      END TRY 
      BEGIN CATCH 
       SELECT 'An error occured while saving.' AS message; 
      END CATCH 
     END 
    END 
END 
$$ 

DELIMITER ; 
+0

所以我添加了你的代码。在AS消息之后,我得到END语法错误。我仍然收到TRY语法错误,现在它给了我一个CATCH语法错误。 – Harvey

+0

有几个丢失的分号。查看更新的答案。 –

+0

谢谢你帮助我。不幸的是,你所修复的问题仍然存在语法错误。我仍然收到的错误是BEGIN TRY AND END TRY。出于某种原因,END CATCH下的END会要求END IF。 – Harvey