【问题标题】:MySQL Error Code: 1064 Stored Procedure Syntax Error near END ENDMySQL 错误代码:1064 END END 附近的存储过程语法错误
【发布时间】:2015-05-06 14:22:44
【问题描述】:

我是 MYSQL 编程的新手,我需要创建一个将动物添加到动物表的存储过程,但它需要检查类别表 (catID) 和区域表中是否存在外键 (区号)。

这是我目前所拥有的,但收到一条错误消息,提示在 END END 附近存在语法错误,我尝试放置括号,但出现更多错误。

如果有人能帮忙那就太好了!

-- checking if the SP already exists and deletes it
DROP PROCEDURE IF EXISTS sp_AddAnimal;

-- creates the stored procedure to add animals to the Animal Table
DELIMITER $$
CREATE PROCEDURE sp_AddAnimal
        (
        IN  p_animalType                    VARCHAR(30), 
        IN  p_weight                        VARCHAR(6) , 
        IN  p_gender                        VARCHAR(7) , 
        IN  p_age                           VARCHAR(4) , 
        IN  p_stock                         INT        , 
        IN  p_catID                         INT        ,
        IN  p_areaID                        INT      
     )
BEGIN 

    IF EXISTS (SELECT catID FROM Catagory WHERE Catagory.catID = p_catID) THEN
    BEGIN
        IF EXISTS (SELECT areaID FROM Area WHERE Area.areaID = p_areaID) THEN
            BEGIN
                INSERT INTO Animal
                    (
                        animalType                    , 
                        weight                        , 
                        gender                        , 
                        age                           , 
                        stock                         , 
                        catID                         ,
                        areaID                        
                    )
                VALUES 
                    ( 
                        p_animalType                    , 
                        p_weight                        , 
                        p_gender                        , 
                        p_age                           , 
                        p_stock                         , 
                        p_catID                         , 
                        p_areaID                    
                    ) ; 
            END
    END   
END 

DELIMITER;

【问题讨论】:

  • 对于 IF 语句,使用 END IF;另外,不要忘记分号。
  • 如果您仍然卡住,This documentation 可能会帮助您。

标签: mysql stored-procedures mysql-error-1064


【解决方案1】:

IF ... END IF 块的语法是:

IF search_condition THEN statement_list
    [ELSEIF search_condition THEN statement_list] ...
    [ELSE statement_list]
END IF

来自 cmets 中的 link

您需要使用END IF 而不仅仅是END 来关闭您的

IF EXISTS (SELECT catID FROM Catagory WHERE Catagory.catID = p_catID) THEN

和你的

IF EXISTS (SELECT areaID FROM Area WHERE Area.areaID = p_areaID) THEN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2018-06-21
    • 2014-05-07
    • 2017-12-16
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    相关资源
    最近更新 更多