MySQL 存储过程检查 table 是否存在然后更改语法错误
MySQL Stored Procedure check if table exists then Alter Syntax Error
我有如下存储过程:
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 处收到错误消息(分隔符在此位置无效输入)。我做错了什么miss/How我做错了吗?预先感谢您的回复。
已更新
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
这个答案来自@Solarflare,因为 he/she 没有 post 答案,所以我会这样做,这样我就可以将这个问题标记为已回答,它可能会派上用场其他可能 运行 遇到与我相同问题的新手。
You have to leave a space between delimiter and ;
我有如下存储过程:
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 处收到错误消息(分隔符在此位置无效输入)。我做错了什么miss/How我做错了吗?预先感谢您的回复。
已更新
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
这个答案来自@Solarflare,因为 he/she 没有 post 答案,所以我会这样做,这样我就可以将这个问题标记为已回答,它可能会派上用场其他可能 运行 遇到与我相同问题的新手。
You have to leave a space between delimiter and ;