MySQL存储过程无用的错误
Posted
技术标签:
【中文标题】MySQL存储过程无用的错误【英文标题】:MySQL Stored Procedure unhelpful error 【发布时间】:2014-03-26 16:45:26 【问题描述】:mysql 给了我“在 '' 附近使用的正确语法”作为响应我的 SP 的错误。
附加的SQL抛出上述错误,不知道为什么,SP需要放在左窗格中,但没有它就无法保存。
http://www.sqlfiddle.com/#!2/075db/3
知道为什么要这样做吗?
【问题讨论】:
【参考方案1】:试试这个:
CREATE PROCEDURE Upsert_Page(
pageID smallint,
pageTitle varchar(50),
pageName varchar(50),
pageViewable tinyint,
pageDeleted tinyint,
pageMetaData varchar(5000),
pageParent smallint,
pageRequired tinyint,
pageAdmin tinyint
)
BEGIN
IF (SELECT 1 = 1 FROM Page WHERE Page.ID = pageID) THEN
UPDATE `Page`
SET `Page`.`Title` = pageTitle,
`Page`.`Name` = pageName,
`Page`.`IsViewable` = pageViewable,
`Page`.`IsDeleted` = pageDeleted,
`Page`.`MetaData` = pageMetaData,
`Page`.`ParentID` = pageParent,
`Page`.`IsRequired` = pageRequired,
`Page`.`IsAdmin` = pageAdmin
WHERE `Page`.`ID` = pageID;
ELSE
begin
DECLARE last_id int;
INSERT INTO `Page`(`Title`, `Name`, `IsViewable`, `IsDeleted`,
`MetaData`, `ParentID`, `IsRequired`, `IsAdmin`)
VALUES (pageTitle, pageName, pageViewable, pageDeleted,
pageMetaData, pageParent, pageRequired, pageAdmin);
SET last_id = LAST_INSERT_ID();
INSERT INTO `PageWidget`(`ID`,`WidgetID`,`PageID`)
SELECT
null, `Widget`.`ID`, last_id
FROM `Widget`
JOIN `WidgetType` ON `Widget`.`WidgetTypeID` = `WidgetType`.`ID`
WHERE `WidgetType`.`IsUnique` = 1;
end;
END IF;
END;
/
现在可以正常编译了,请看这个演示:http://www.sqlfiddle.com/#!2/a3d58
(您需要滚动到左侧面板的底部)
有一些小错误 - 缺少分号、缺少反引号字符等。
一句话:IF ... THEN ... END
不需要BEGIN ... END
屏蔽,只需:
IF condition THEN
statements
.....
.....
ELSE
statements
....
....
END IF;
【讨论】:
您好 Kordirko,感谢您的回复,我在 phpmyadmin sql 选项卡中尝试了您的示例,并收到错误“您的 SQL 语法有错误;请查看与您的 MySQL 对应的手册在“/”附近使用正确语法的服务器版本,当删除查询末尾的“/”时,该错误仍然很明显。sqlfiddle和phpmyadmin之间有区别吗? 请阅读此链接:***.com/questions/8080681/… 了解如何使用 phpmyadmin 创建存储过程。您需要设置一个分隔符(例如 $$),并将其放在最后一个end
之后。请研究此链接了解详情。以上是关于MySQL存储过程无用的错误的主要内容,如果未能解决你的问题,请参考以下文章