报错的原因是因为在过程或者函数中存在分隔符 分号(;),而mysql中默认分隔符也是 ;
这就导致创建函数时分开了。这个时候就要使用delimiter来解决这个问题。
delimiter介绍:delimiter是mysql分隔符,在mysql客户端中分隔符默认是分号(;)。如果一次输入的语句较多,并且语句中间有分号,这时需要新指定一个特殊的分隔符。
在创建函数时定义参数时会以;结尾,这个时候mysql解释器就觉得你已经结束了语句,就会对你;以上的部分进行解析,但是下面的部分(以;结束)会分为另外一个部分,这个时候就会造成语法错误,所以这个时候我们就是把mysql中的分隔符变成其他的符号例如 '$$' 。
这个时候mysql的解释器就会以 '$$' 之前的语句作为一个整体进行解析。
-- 将分隔符变为$$
-- 如果不使用DELIMITER 那么在 default 0 ; 此处的;前面的部分会被当成一个整体进行解析从而造成语法错误
DELIMITER $$
create function memo3(ida int) returns int
begin
declare num int default 0;
select count(*) into num from bms_bills_memo
where id = ida;
return num;
end
$$
-- 将$$以上的语句变为一个整体进行解析
-- 将分隔符改回;
DELIMITER ;