2017-08-25 69 views
0

这是给错误1064,借款人是一个表,dataofissue是签发日期,rollno是卷没有从借款人表:我在MySQL的函数有一个错误

create function get_info(roll in integer,name in varchar(20)) 
    -> return boolean 
    -> begin 
    -> set @date1=curdate() 
    -> set @date2:=select dataofissue from borrower where rollin=roll and nameofbook=name 
    -> select DATEDIFF(@date1,@date2) into @date3 from borrower 
    -> select @date3 
    -> if(@date3>15) 
    -> return (false) 
    -> else 
    -> return (true) 
    -> end; 

回答

0

为了使用SELECT查询作为一种价值,你必须把它放在括号:

set @date2:=(select dataofissue from borrower where rollin=roll and nameofbook=name) 

或者您可以使用INTO给变量赋值:

select dataofissue INTO @date2 from borrower where rollin=roll and nameofbook=name 

另外,在函数中的每个语句后都需要;。为了防止立即结束函数定义,必须在定义函数之前使用DELIMITER指令,并使用该分隔符来结束函数。

IF需要THENEND IF

您不能指定IN,OUTINOUT作为函数参数,这只适用于过程。

DELIMITER $ 
create function get_info(roll integer, name varchar(20)) return boolean 
begin 
    set @date1=curdate(); 
    set @date2:=(select dataofissue from borrower where rollin=roll and nameofbook=name); 
    select DATEDIFF(@date1,@date2) into @date3; 
    if (@date3>15) 
    then return (false); 
    else return (true); 
    end if; 
end$ 
+0

我已使所有更改仍然给相同的错误。 –

+0

错误1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在'varchar(20)'中使用'in integer'中的正确语法。return boolean begin set @ date1 = curdate(); '在第1行 –

+0

函数没有'IN'和'OUT'参数。所有参数都是输入的,所以你不能把它放在那里。 – Barmar

相关问题