1

纠结这个问题太久了,特来求救。。。

我有一个 MySQL 存储过程,我想执行以下操作:

给定记录的“id”和“用户名”

  1. 如果表中不存在 id 则创建记录
  2. 否则,如果 id 存在且用户名与存在的不同,则更新记录
  3. 否则什么都不做

我尝试了以下方法:

BEGIN

DECLARE doCreate INT;
DECLARE doUpdate INT;
SELECT COUNT(*) INTO doCreate FROM app_user WHERE id=1;
IF (doCreate > 0) THEN 
   SELECT COUNT(*) INTO doUpdate FROM app_user WHERE id=1 AND username='other';
END IF

IF(doCreate = 0) THEN ---SYNTAX ERROR ON THIS LINE---
   SELECT 'CREATE';
ELSE IF(doUpdate = 0) THEN
   SELECT 'UPDATE';
ELSE
   SELECT 'NOTHING';
END IF

END

我也尝试用 case 语句替换 if-elseif-else 块,但得到相同的结果......

CASE ---ERROR ON THIS LINE---
   WHEN doCreate = 0 THEN 
      SELECT 'CREATE';
   WHEN doUpdate = 0 THEN
      SELECT 'UPDATE';
   ELSE
      SELECT 'NOTHING';
END
  • 我似乎对第一个 END IF 之后的任何内容都有语法错误,所以这是发生的第一个问题......

任何帮助将不胜感激 - 我相信有更好的方法来做到这一点。

4

1 回答 1

2

我相信您需要用 s 来终止END IFs ;,并且在内部ELSEIF应该是一个词。否则,END IF需要另一个,但找不到。

IF (doCreate > 0) THEN 
   SELECT COUNT(*) INTO doUpdate FROM app_user WHERE id=1 AND username='other';
END IF; /* terminate with ; */

IF(doCreate = 0) THEN 
   SELECT 'CREATE';
ELSEIF(doUpdate = 0) THEN
   SELECT 'UPDATE';
ELSE
   SELECT 'NOTHING';
END IF; /* terminate with ; */

查看MySQLIF/ELSE语法参考以获取各种使用示例。

于 2012-07-28T19:17:23.897 回答