无法创建 MySQL 存储过程

Not able to create a MySQL stored procedure

我正在尝试创建一个存储过程:

delimiter //
CREATE PROCEDURE update_counter
BEGIN 
 UPDATE bookmark bk,
 (SELECT count(Distinct user_bookmarks.user_id) AS bookmark_counter, bookmark_id 
  FROM user_bookmarks 
  LEFT JOIN bookmarks ON user_bookmarks.bookmark_id = bookmarks.id 
  GROUP BY user_bookmarks.bookmark_id 
 ) t
 set bk.counter = t.bookmark_counter
 where bk.id = t.bookmark_id
END //

但这给我一个错误

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 'BEGIN UPDATE bookmark bk, (SELECT count(Distinct user_bookmarks.user_id) AS' at line 2 Any idea? What is wrong here?

您必须在 header 中定义 IN 和 OUT 参数。如果您没有参数,则必须添加 ()

delimiter //
CREATE PROCEDURE update_counter()
BEGIN 
 UPDATE bookmark bk,
 (SELECT count(Distinct user_bookmarks.user_id) AS bookmark_counter, bookmark_id 
  FROM user_bookmarks 
  LEFT JOIN bookmarks ON user_bookmarks.bookmark_id = bookmarks.id 
  GROUP BY user_bookmarks.bookmark_id 
 ) t
 set bk.counter = t.bookmark_counter
 where bk.id = t.bookmark_id;
END//

 delimiter;

过程名称应以 () 结尾,即使没有指定 inout update_counter()

delimiter //
CREATE PROCEDURE update_counter()
BEGIN 
 UPDATE bookmark bk,
 (SELECT count(Distinct user_bookmarks.user_id) AS bookmark_counter, bookmark_id 
  FROM user_bookmarks 
  LEFT JOIN bookmarks ON user_bookmarks.bookmark_id = bookmarks.id 
  GROUP BY user_bookmarks.bookmark_id 
 ) t
 set bk.counter = t.bookmark_counter
 where bk.id = t.bookmark_id;
END;//

delimiter ;