湖北专升本MySQL复习(MySQL数据库实用教程)——自定义函数

自定义函数

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;$$

猜你喜欢

转载自blog.csdn.net/m0_52475160/article/details/125046805