在MySQL中创建存储过程时出错,错误#1064

问题描述

我很难创建存储过程。 我曾尝试根据堆栈溢出的其他条目来更改某些内容,但这没有帮助。

select version();返回5.7.31-0ubuntu0.16.04.1以防万一。

这是查询:

DELIMITER $$
CREATE
PROCEDURE forceSubscribeToNode(IN node_id_var INT)
BEGIN
  INSERT
INTO
  xf_forum_watch(
    user_id,node_id,notify_on,send_alert,send_email
  )
SELECT
  user_id,node_id_var AS node_id,"thread" AS notify_on,1 AS send_alert,1 AS send_email
FROM
  xf_user
WHERE
  user_group_id NOT IN(
      1,18,40
  )
  ON DUPLICATE KEY
UPDATE
  send_alert = 1,send_email = 1,notify_on = CASE WHEN notify_on IS NULL OR notify_on = '' THEN 'thread' ELSE notify_on END
END $$
DELIMITER ;

这是错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END' at line 30

(第18行是“ send_email = 1”,

对于上下文,搜索引擎和将来的参考:

这将用于论坛软件Xenforo 2.1,以强制用户订阅某些节点,例如类别和子论坛。

解决方法

所以我似乎忘记了在第一个 ;之后添加一个END空格

DELIMITER $$
CREATE
PROCEDURE forceSubscribeToNode(IN node_id_var INT)
BEGIN
  INSERT
INTO
  xf_forum_watch(
    user_id,node_id,notify_on,send_alert,send_email
  )
SELECT
  user_id,node_id_var AS node_id,"thread" AS notify_on,1 AS send_alert,1 AS send_email
FROM
  xf_user
WHERE
  user_group_id NOT IN(
      1,18,40
  )
  ON DUPLICATE KEY
UPDATE
  send_alert = 1,send_email = 1,notify_on = CASE WHEN notify_on IS NULL OR notify_on = '' THEN 'thread' ELSE notify_on END ;
END $$

DELIMITER ;

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...