2011-03-02 77 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 
相關問題