一、基本语法
delimiter 自定义符号 -- 如果函数体只有一条语句, begin和end可以省略, 同时delimiter也可以省略
create function 函数名(形参列表) returns 返回类型 -- 注意是retruns
begin
函数体 -- 函数内定义的变量如:set @x = 1; 变量x为全局变量,在函数外面也可以使用
返回值
end
自定义符号
delimiter ;
关键字delimiter的使用:
delimiter是mysql分隔符。在mysqlclient中分隔符默认是分号(;)。
假设一次输入的语句较多,而且语句中间有分号,这时须要新指定一个特殊的分隔符。
在前一篇中有设置mysql的触发器时使用样例
mysql> delimiter //
mysql> create trigger upd_check before update on account
-> for each row
-> begin
-> if new.amount < 0 then
-> set new.amount=0;
-> elseif new.amount > 100 then
-> set new.amount = 100;
-> end if;
-> end;
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
上面就是。先将分隔符设置为 //,
直到遇到下一个 //,才总体运行语句。
运行完后。最后一行, delimiter ; 将mysql的分隔符又一次设置为分号;
假设不改动的话,本次会话中的全部分隔符都以// 为准。
二、创建函数示例
定义一个相加函数myfun3
-- 自定义函数
delimiter $$
create function myfun3(ia int, ib int) returns int
begin
return ia + ib;
end
$$
delimiter ;
三、查看函数
-
show function status [like 'pattern']; -- 查看所有自定义函数, 自定义函数只能在本数据库使用。
-
show create function 函数名; -- 查看函数创建语句
四、删除函数
drop function 函数名;
五、调用函数
select myfun3(2,3); --参数需为对应类型
六、综合应用
- 使用全局变量
-- 计算1 ~ 指定数据之间的和
delimiter $$
create function my_sum(x int) returns int
begin
set @i = 1;
set @sum = 0;
while @i <= x do
set @sum = @sum + @i;
set @i = @i + 1;
end while;
return @sum;
end
$$
delimiter ;
- 使用局部变量
-- 求1 ~ 指定数之前的和,但5的倍数不加
delimiter $$
create function my_sum2(x int) returns int
begin
declare i int default 1;
declare sum int default 0;
sumwhile:while i <= x do
if i % 5 = 0 then
set i = i + 1;
iterate sumwhile;
end if;
set sum = sum + i;
set i = i + 1;
end while;
return sum;
end
$$
delimiter ;