2011-03-02 76 views
3

我想使用request_time参数自动设置session_id,所以我选择了一个包含case语句的mysql存储过程。这里有。如何在mysql存储过程中使用case-when语句?

create procedure upd_userinput(in request_time timestamp, out user_session_id int) 

begin 

update user_input; 

case request_time 

when time(request_time) < '9:15:00' && time(request_time) > '8:15:00' 
then set user_session_id = 1; 

when time(request_time)< '10:15:00' && time(request_time) > '11:15:00' 
then set user_session_id =2; 

end case; 
end 
// 

但是,我得到一个1064错误输入//后。我检查了mysql文档,我认为case语法是正确的。

请帮忙。

回答

5
delimiter // 

create procedure upd_userinput(in request_time TIMESTAMP,out time TIME, out user_session_id INT)  

begin  

set time = time(request_time);  

case 
when time < '09:15:00' && time > '08:15:00' then  
set user_session_id = 1; 

when time < '10:15:00' && time > '11:15:00' then 
set user_session_id = 2; 

else set user_session_id =3; 

end case; 
end // 
+0

谢谢。以上尝试,但仍然得到1064错误...'为正确的语法使用附近';当时间(request_time)... – watkib 2011-03-02 14:04:08

+0

我已经有了另一个裂缝,尝试。 – WillDud 2011-03-02 17:09:32

+0

谢谢,试过了。再次相同,但我想通了。看到编辑答案。 – watkib 2011-03-03 07:41:36

1

该案例必须匹配至少一个给定的语句,否则你会得到这个错误。为了避免错误包含其他内容。

create procedure upd_userinput(in request_time timestamp, out user_session_id int) 
begin 
update user_input; 
case request_time 
when time(request_time) < '9:15:00' && time(request_time) > '8:15:00' then 
set user_session_id = 1; 
when time(request_time)< '10:15:00' && time(request_time) > '11:15:00' then 
set user_session_id =2; 
else set user_session_id =0; 
end case; 
end 
相关问题