【发布时间】:2014-09-10 22:48:45
【问题描述】:
我想在 IS NOT NULL 的存储过程中使用 CASE 语句,但是当我想保存它时出现错误:
错误:
MySQL 说:1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在附近使用的正确语法
'ELSE SET @v_delay:=0 END INSERT INTO `ts' 在第 19 行
我的存储过程:
BEGIN
DECLARE v_user_start_time INT UNSIGNED;
DECLARE v_delay INT(11);
DECLARE v_pyear INT UNSIGNED;
DECLARE v_mounth INT UNSIGNED;
SET @v_pyear = pyear ( _datetime_in ) ;
SET @v_mounth = pmonth( _datetime_in );
SET @v_user_start_time := (SELECT `start_time` FROM `tsms_range_time` WHERE `user_id` = _user_id);
/* Check for first record today for calculate Delay*/
SET @v_is_new := (SELECT id from `tsms_entry_exit` WHERE `datetime_in` = NOW() );
/* calculate USER delay */
CASE WHEN @v_is_new IS NOT NULL
THEN
SET @v_delay := SEC_TO_TIME (TIME_TO_SEC(_datetime_in) - TIME_TO_SEC(@v_user_start_time)) ;
ELSE
SET @v_delay:=0;
END CASE;
INSERT INTO `tsms_entry_exit`
(
`user_id`,
`datetime_in`,
`datetime_out`,
`delay`,
`period`
)
VALUES
(
_user_id,
_datetime_in,
_datetime_out,
@v_delay,
CONCAT(@v_pyear, @v_mounth)
);
SELECT ROW_COUNT() AS 'Affected rows';
END
【问题讨论】:
-
反引号建议使用 MySQL,所以我删除了 sql-server 标记。
标签: mysql sql stored-procedures