【发布时间】:2019-07-23 04:51:45
【问题描述】:
从IF....ELSE IF...ELSE 更改为SWITCH 之后。我收到错误代码:1064
而不是IF....ELSE IF...ELSE 语句为两个以上的条件执行不同的代码,而不是上面我更改为
SWITCH 语句根据不同的条件执行一个单独的操作,然后在SWITCH 条件之外执行break,而不是多次执行IF 条件。
尤其是CASE WHEN FeedFlagStatus == '5' THEN
错误代码:1064
您的 SQL 语法有错误;检查手册 对应于您的 MariaDB 服务器版本,以便使用正确的语法 附近'= 5 THEN UPDATE
feed_item_settingSETread_status= ReadStatus WHERE' 在第 23 行
DELIMITER @@;
CREATE
PROCEDURE `saveProfileSetting`(IN `UserId` BIGINT, IN `FeedFlagStatus` INT, IN `ReadStatus` INT, IN `WriteStatus` INT, IN `WriteCmtStatus` INT)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
BEGIN
DECLARE userid VARCHAR(255);
DECLARE noOfHits INT(11);
DECLARE noOfHits2 INT(11);
DECLARE intCode INT(11);
SET userid = UserId;
SET noOfHits = ( SELECT `user_id` FROM `feed_item_setting` WHERE `user_id` = UserId );
SET noOfHits2 = ( SELECT COUNT(*) FROM `feed_item_setting` WHERE `user_id` = UserId );
IF EXISTS (SELECT `user_id` FROM `feed_item_setting` WHERE `user_id` = UserId ) THEN
BEGIN
CASE
WHEN FeedFlagStatus == 5 THEN
UPDATE `feed_item_setting` SET `read_status` = ReadStatus WHERE `user_id` = UserId;
SET intCode = FeedFlagStatus;
WHEN FeedFlagStatus == 6 THEN
UPDATE `feed_item_setting` SET `write_status` = WriteStatus WHERE `user_id` = UserId;
SET intCode = FeedFlagStatus;
WHEN FeedFlagStatus == 7 THEN
UPDATE `feed_item_setting` SET `write_cmt_status` = WriteCmtStatus WHERE `user_id` = UserId;
SET intCode = FeedFlagStatus;
END CASE;
END;
ELSE
BEGIN
CASE
WHEN FeedFlagStatus == 5 THEN
INSERT INTO `feed_item_setting` (`user_id`, `read_status`) VALUES (UserId, ReadStatus);
SET intCode = FeedFlagStatus;
WHEN FeedFlagStatus == 6 THEN
INSERT INTO `feed_item_setting` (`user_id`, `write_status`) VALUES (UserId, WriteStatus);
SET intCode = FeedFlagStatus;
WHEN FeedFlagStatus == 7 THEN
INSERT INTO `feed_item_setting` (`user_id`, `write_cmt_status`) VALUES (UserId, WriteCmtStatus);
SET intCode = FeedFlagStatus;
END CASE;
END;
END IF;
SELECT userid, noOfHits, noOfHits2, intCode;
END;
@@; -- Altered delimiter terminated compound statement
DELIMITER ; -- restore delimiter to standard semicolon
【问题讨论】:
-
单
=而不是双==? -
执行成功。我教它是一个赋值运算符
=。它实际上是一个相等运算符@jarlh -
SQL 和其他一些语言只有一个
=用于比较和赋值。 -
@jarlh - 并不总是:
SELECT @var := expression ...- 需要冒号来消除歧义。同时,SET @var ...可以任意使用。
标签: sql stored-procedures syntax switch-statement mariadb