Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL存储过程无效错误_Mysql_Sql_Stored Procedures - Fatal编程技术网

MySQL存储过程无效错误

MySQL存储过程无效错误,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,MySQL向我提供了“正确的语法以在“”附近使用”,作为响应我的SP的错误 附加的SQL抛出了上述错误,不知道为什么,SP需要放在左窗格中,但没有该错误无法保存 知道为什么要这么做吗?试试这个: CREATE PROCEDURE Upsert_Page( pageID smallint, pageTitle varchar(50), pageName varchar(50), pageViewable tinyint, pageDeleted tinyint, page

MySQL向我提供了“正确的语法以在“”附近使用”,作为响应我的SP的错误

附加的SQL抛出了上述错误,不知道为什么,SP需要放在左窗格中,但没有该错误无法保存

知道为什么要这么做吗?

试试这个:

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;
/
现在它编译得很好,请参见此演示:
(您需要滚动到左侧面板的底部)

有一些小错误-缺少分号、缺少反勾号字符等。
一句话:
如果。。。然后结束
不需要开始。。。结束块,只需:

IF condition THEN
   statements 
   .....
   .....
ELSE
  statements
  ....
  ....
END IF;

您好,Kordirko,感谢您的回复,我在phpmyadmin sql选项卡中尝试了您的示例,并收到一个错误“您的sql语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在“/”附近使用的正确语法,在删除查询末尾的“/”时,该错误仍然很明显。。sqlfiddle和phpmyadmin之间有区别吗?请阅读此链接:了解如何使用phpmyadmin创建存储过程。您需要设置一个分隔符(例如$$),并将其放在last
end
之后。请研究此链接以了解详细信息。