Invalid Stored Procedure Syntax

保存然后报错说:Invalid Stored Procedure Syntax


CREATE DEFINER=`root`@`localhost` FUNCTION `chumen`(in student_sid varchar(12),IN REASON TEXT)
begin
DECLARE id int;                                       -- 存储二维码信息长度
DECLARE info VARCHAR(50);                             -- 存储查询结果的变量
DECLARE s_time TIMESTAMP ;                            -- 存储请假单的开始时间
DECLARE f_time TIMESTAMP;                             -- 存储请假单的结束时间
DECLARE r_state VARCHAR(6);                           -- 存储请假的状态
DECLARE result VARCHAR(10) default '1';               -- 存储最后的结果
set id= (SELECT LENGTH(in_id));
if id=11
then set info='老师,您好!';
elseif id=12
then set info='同学,您好,请出示请假条二维码!';
ELSE BEGIN
SELECT s_time ,f_time,state into s_time,f_time, r_state
from leave_request
where id=in_id and state='未出校';
if r_state='未出校'
then if s_time-NOW()<=0 and f_time-NOW()>=0
then BEGIN
set info='通过!';
UPDATE `request for leave` set state='已出校',out_time=NOW() where id=in_id;
end;
ELSE set info='时间未到或已超时!';
end if;
ELSE set info= '请假单无效!';
end if ;
end ;
end if;                                              -- 判断二维码的种类;
UPDATE eave request set state='已出校' where id=in_id;
RETURN info;
end

语法错了。function 的begin前有returns type。
例子

DELIMITER //  
CREATE FUNCTION GetEmployeeInformationByID(id INT)  
RETURNS VARCHAR(300)  
BEGIN  
    RETURN(SELECT CONCAT('employee name:',employee_name,'---','salary: ',employee_salary) FROM employees WHERE employee_id=id);  
END//  
DELIMITER ;