SQL存储过程语法错误缺少“结束”

Christofer课程

我一直在研究SQL存储过程,并且对该过程非常陌生。我正在尝试编写一个从一个表中检索值并将其作为新行的一部分插入到另一个表中的过程。

我正在使用MySQL Workbench,这给了我一个错误

WHERE blockId = blk;

作为以下代码的一部分:

CREATE DEFINER=`root`@`localhost` PROCEDURE `add_userblock`(IN user INT(11), IN blk INT(11))
BEGIN
    -- Determine how many blocks you can add
    DECLARE blockNum INT DEFAULT -1;
    SELECT addCount INTO blockNum
        FROM block
        WHERE blockId = blk;

    -- Determine if the block already exists for the user
    DECLARE entryExists INT DEFAULT 0;
    SELECT COUNT(*) INTO entryExists
        FROM userblock
        WHERE blockId = blk AND userId = user;

    IF (entryExists = 0)
        -- This is a new entry
        BEGIN
        INSERT INTO userblock (userId, blockId, num) VALUES (user, blk, blockNum);
        SELECT LAST_INSERT_ID() as 'id';
        END
    ELSE
        -- This is an existing entry
        BEGIN
        UPDATE userblock
            SET num = (num + blockNum)
            WHERE userId = user AND blockId = blk;
        END
END

错误为“语法错误:缺少'end'”。我不完全清楚这意味着什么,而且无法解决问题。

谢谢,感谢您的宝贵时间!

Christofer课程

在帮助下,我能够使用以下代码解决此问题(至少在编译方面):

CREATE DEFINER=`root`@`localhost` PROCEDURE `add_userblock`(IN user INT(11), IN blk INT(11))
BEGIN
    DECLARE blockNum INT DEFAULT -1;
    DECLARE entryExists INT DEFAULT 0;

    -- Determine how many blocks you can add
    SELECT addCount INTO blockNum
        FROM block
        WHERE blockId = blk;

    -- Determine if the block already exists for the user
    SELECT COUNT(*) INTO entryExists
        FROM userblock
        WHERE blockId = blk AND userId = user;

    IF entryExists = 0
    THEN
        -- This is a new entry
        INSERT INTO userblock (userId, blockId, num) VALUES (user, blk, blockNum);
        SELECT LAST_INSERT_ID() as 'id';
    ELSE
        -- This is an existing entry
        UPDATE userblock
            SET num = (num + blockNum)
            WHERE userId = user AND blockId = blk;
        SELECT LAST_INSERT_ID() as 'id';
    END IF;
END

这个问题似乎是两件事的结合:

  1. 我为MySQL工作台的存储过程使用了错误的IF ELSE语法
  2. 我需要在过程顶部声明我的变量

感谢您的支持!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL语法错误。创建存储过程

来自分类Dev

SQL Server:存储过程语法错误

来自分类Dev

SQL Server存储过程的语法错误

来自分类Dev

SQL语法错误。创建存储过程

来自分类Dev

存储过程语法错误

来自分类Dev

SQL Server中的存储过程;语法错误

来自分类Dev

SQL Server创建存储过程语法错误

来自分类Dev

sql 存储过程条件 where 子句返回语法错误

来自分类Dev

SQL Server 存储过程语法错误值

来自分类Dev

MySQL存储过程语法错误

来自分类Dev

存储过程中的语法错误

来自分类Dev

MySql存储过程参数-语法错误

来自分类Dev

MySQL语法错误创建存储过程

来自分类Dev

mysql语法错误存储过程

来自分类Dev

MySQL存储过程语法错误

来自分类Dev

TSQL存储过程语法错误

来自分类Dev

MySQL存储过程语法错误

来自分类Dev

创建存储过程-语法错误

来自分类Dev

MySQL中的存储过程语法错误

来自分类Dev

Hibernate查询结束了在SQL语法错误

来自分类Dev

过程中的SQL语法错误

来自分类Dev

SQL语法错误:“缺少右括号”

来自分类Dev

如果不是语法,则存储过程语法错误

来自分类Dev

缺少语法错误

来自分类Dev

SQL Server存储过程中的语法错误转义字符串

来自分类Dev

在Visual Studio 15中创建存储过程时出现SQL46010语法错误

来自分类Dev

剪切和粘贴 SQL 存储过程后出现语法错误

来自分类Dev

MySQL服务器存储过程语法错误

来自分类Dev

MySql存储过程循环游标-语法错误