MySQL存储过程检查表是否存在然后更改语法错误

时间:2016-09-08 10:26:16

标签: mysql stored-procedures syntax alter

我的存储过程如下:

DROP PROCEDURE IF EXISTS TEST;
CREATE PROCEDURE TEST()
BEGIN
    IF (SELECT count(*) FROM (SELECT table_name 
                FROM INFORMATION_SCHEMA.TABLES
               WHERE table_name LIKE 'User') A) > 0 THEN
        ALTER TABLE User DROP FOREIGN KEY FK_forkey
    END IF;
END

SELECT ....

我在END IF处有语法错误。我一直在尝试很多方法来解决这个问题,但到目前为止还没有成功。如果我在DROP PROCEDURE之后和END之后添加Delimiter,我会在结束时得到错误Delimiter(分隔符在此位置无效输入)。我错过了什么/我怎么做错了?提前感谢您的回复。

已更新

DROP PROCEDURE IF EXISTS TEST;
DELIMITER //
CREATE PROCEDURE TEST()
BEGIN
    IF EXISTS(SELECT table_name 
                FROM INFORMATION_SCHEMA.TABLES
               WHERE table_name LIKE 'User')
    THEN
       ALTER TABLE User DROP FOREIGN KEY FK_AccountID;
    END IF;
END //
DELIMITER; 

上面更新的是我的新更改,并在最后的分隔符报告错误:Delimiter is not valid input at this position

1 个答案:

答案 0 :(得分:0)

这个答案来自@Solarflare,因为他/她没有发布答案,我会这样做,所以我可以将这个问题标记为已回答,它可能会对其他新手可能派上用场遇到和我一样的问题。

  

你必须在分隔符和;

之间留一个空格