MySQL不仅内置了一些常用函数,同时也支持自定义函数,来满足开发者的需求
MySQL的函数定义语法如下:
CREATE
[DEFINER = { user | CURRENT_USER }]
FUNCTION functionName ( varName varType [, ... ] )
RETURNS returnVarType
[characteristic ...]
routine_body
characteristic的可用参数值如下:
| 值 | 说明 | | :-: | :-: | | language sql | 指明函数体的语言类型, 目前仅支持sql | | [not] deterministic | deterministic 指明函数的结果是确定的,即相同的输入会得到相同的输出;not deterministic意为结果不确定。默认为 not deterministic | | { contains sql | no sql | reads sql data | modifies sql data } | 指明函数体使用sql语句的限制。contains sql意为函数体包含sql语句,但不包含读写数据的sql语句;no sql意为函数体不包含sql语句;reads sql data意为函数体包含读数据sql语句;modifies sql data意为函数体包含写数据的sql语句。默认为contains sql | | sql security { definer | invoker } | 指明谁有权限执行该函数。definer意为只有定义者才能执行;invoker意为拥有权限的调用者可以执行。默认为definer | | comment ‘message’ | 函数的注释信息,指明函数的功能 |
示例如下:
create
function myfun_getAvg(num1 int, num2 int)
comment '计算两个数的均值'
returns int
return (num1+num2)/2;
create
function myfun_getMax(num1 int, num2 int)
returns int
begin
declare res int;
if(num1 > num2) then
set res = num1;
elseif (num1 < num2) then
set res = num2;
else
set res = num1;
end if;
return res;
end;
定义在sql语句块中的变量,常见于存储过程和函数的 begin … end 中,语句块执行完后局部变量则结束生命周期
函数中可以通过 declare 声明定义局部变量,其作用域为 begin … end 的函数体中。默认初值为nul,可以通过default指定该语句中所有定义变量的初值
declare var [, .