自定义函数
1.1创建自定义函数
create function 函数名(参数1,参数2,...)
returns 返回值的数据类型
[函数选项]
Begin
函数体;
return 语句;
end;
例:创建自定义函数,根据学号查找学生的姓名。
delimiter $$
create function name_fn(s char(10))
returns char(10)
reads sql data
begin
declare q char(10);
select 学号 into q where 学号=s;
return q;
end;$$
1.2 自定义函数的调用
调用自定义函数与调用系统函数的方法一样,使用select语句;例如,调用上面的自定义函数,select name_fn('1906010834')。
1.3自定义函数的删除
drop function 函数名;
1.4 自定义函数的维护
1)查看当前数据库中的所有自定义函数——show function status;
2)查看指定函数名的详细信息——show create function 函数名; 可以查看指定函数名的详细信息。
流程控制语句
1.1 条件控制语句
1.IF语句
IF 条件表达式1 then 语句块1;
[else if 条件表达式2 then 语句块2]...
[else 语句块n]
end if;
注:end if 后必须与“;”(英文输入法下冒号)结束。
每个if 与最近的end if匹配为if语句
例:创建自定义函数,求两个数的最大值。
create function a_fn(a int,b int)
returns int
no sql
begin
if a>b then retuen a;
else return b;
end if;
end;$$
2.case——MySQL无须使用break语句
case 表达式
when values then 语句块1;
when values then 语句块2;
else 语句块 n;
end case;
例:创建get_week_fn()函数,使该函数根据MYSQL服务器的系统时间打印星期几。
delimiter $$
create function week_fn(week_no int)
returns char(20)
no sql
begin
declare week char(20);
case week_no
when 0 then set week='星期一';
when 1 then set week='星期二';
when 2 then set week='星期三';
when 3 then set week='星期四';
when 4 then set week='星期五';
else set week='今天休息';
end case;
return week;
end;$$
循环语句
1.while语句
当条件表达式的值为True,反复执行循环体,直到条件表达式的值为False;
语法格式:
[循环标签:]while 条件表达式 do
循环体;
end while [循环标签];
说明:end while后必须以“;”
例:创建sum_fn()函数,返回1~n(n>1)的整数和。
delimiter $$
create function sum_fn(n int)
returns int
no sql
begin
declare sum int default 0;
declare i int default 0;
while i<n do
set i=i+1;
set sum=sum+i;
end while;
return sum;
end;$$
2.repeat 语句
当条件表达式的值为False时,反复执行循环体,直到条件表达式的值为true,repeat语句的语法格式:
[循环标签:]repeat
循环体;
until 条件表达式
end repeat [循环标签];
例:创建sum2_fn函数,使用repeat循环语句实习1~n(n>1)的整数和
delimiter $$
create function sum2_fn(n int)
returns int
no sql
begin
declare sum int default 0;
declare start int default 0;
repeat
set start=start+1;
set sum=sum+start;
until start = n
end repeat;
return sum;
end;$$
3.leave 语句
leave 语句用于跳出当前循环语句,语法格式:leave 循环标签;
leave循环标签后必须以“;”结束。
例:创建sum3_fn函数,计算n(n>1)以内的累加。其中add_num为循环标签。
delimiter $$
create function sum3_fn(n int)
returns int
no sql
begin
declare sum int default 0;
declare start int default 0;
add_num: while true do
set start=start+1;
set sum=sum+start;
if(start=n) then leave add_num;
end if;
end while add_num;
return sum;
end;$$
4.iterate 语句
iterate语句用于跳出本次循环,继而进行下次循环。
语法格式:iterate 循环标签;
例:创建sum4_fn函数,使用该函数返回1~n(n>1)能被9整除的数之和。
delimiter $$
create function sum4_fn(n int)
returns int
no sql
begin
declare sum int default 0;
declare start int default 0;
add_num: while start<n do
set start=start+1;
if(start%9=0) then set sum=sum+start;
else iterate add_num;
end if;
end while add_num;
return sum;
end;$$
5.loop语句
loop循环语句本身没有停止循环的语句,因此loop通常使用leave语句跳出loop循环。
语法格式:
[循环标签:] loop
循环体;
if 条件表达式 then
leave [循环标签];
end if;
end loop;
说明:end loop后必须以“;”结束。
例:创建sum6_fn函数,实现1-你(n>1)既能被6整除又能被7整除的数的求和运算。
delimiter $$
create function sum6_fn(n int)
returns int
no sql
begin
declare sum int default 0;
declare start int default 0;
add_num:loop
set start=start+1;
if(start%6=0 and start %7=0) then set sum=sum+start;
end if;
if(start=n) then leave add_num;
end if;
end loop;
return sum;
end;$$