例子1:
drop function if exists func2;
delimiter $$
create function func2() returns int
begin
set @i = 1;
set @sum = 0;
while @i <= 10 do
set @sum = @sum + @i;
set @i = @i + 1;
end while;
?
return @sum;
end
$$
delimiter ;
?
例子2:
drop function if exists func;
?
delimiter $$
create function func() returns int
begin
set @i = 1;
set @sum = 0;
w:while @i <= 10 do
if @i = 5 then
leave w;
end if;
set @sum = @sum + @i;
set @i = @i + 1;
end while w;
?
return @sum;
end
$$
delimiter ;
?
例子3:
drop function if exists func;
?
delimiter $$
create function func() returns int
begin
set @i = 1;
set @sum = 0;
w:while @i <= 10 do
if @i = 5 then
set @i = @i + 1;
iterate w;
end if;
set @sum = @sum + @i;
set @i = @i + 1;
end while w;
?
return @sum;
end
$$
delimiter ;
?
说明:即使在函数内部声明的变量,如果使用@变量 形式,也是全局变量,在函数外部也可以访问。要想使用局部变量,有以下两种方法:
1.函数参数: 格式: 参数名 类型
2.函数声明局部变量: 使用declare声明局部变量
declare i int default 0; (局部变量没有@符号)
?
例1(使用参数):
drop function if exists sayHello2;
delimiter $$
create function sayHello2(user_name varchar(10)) returns varchar(20)
begin
return concat('hello ',user_name);
end
$$
delimiter ;
?
还可以像下面一样使用函数:
select id,sayHello2(userName) from student;
例2(使用declare声明局部变量):
drop function if exists mySum;
?
delimiter $$
create function mySum() returns int
begin
declare i int default 1;
declare sum int default 0;
while i<=100 do
set sum=sum+i;
set i=i+1;
end while;
return sum;
end
$$
?
delimiter ;
?
?
应用:
1.存储过程
2.存储函数
3.触发器