【问题标题】:MySQL Stored Procedure unhelpful errorMySQL存储过程无用的错误
【发布时间】:2014-03-26 16:45:26
【问题描述】:

MySQL 给了我“在 '' 附近使用的正确语法”作为响应我的 SP 的错误。

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

http://www.sqlfiddle.com/#!2/075db/3

知道为什么要这样做吗?

【问题讨论】:

    标签: mysql sql stored-procedures


    【解决方案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之间有区别吗?
    • 请阅读此链接:stackoverflow.com/questions/8080681/… 了解如何使用 phpmyadmin 创建存储过程。您需要设置一个分隔符(例如 $$),并将其放在最后一个 end 之后。请研究此链接了解详情。
    猜你喜欢
    • 2016-02-08
    • 2023-03-23
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多