函数: 一组预先编译号的sql语句的集合,理解成批处理语句
区别:
存储过程:可以有0个返回,也可以有多个返回 ,(批量插入,批量更新)
函数:有且仅有一个返回 (适合做处理数据后返回一个结果)
二 调用语法
select 函数名(参数列表)
代码演示
delimiter $$ create function myf2() returns int no sql begin declare c int default 0; select count(*) into c from employees; return c; end $$ delimiter ; select myf2()$
drop function myf3; 删除函数
show create function myf3;
delimiter $$ create function myf3(empName varchar(20)) returns double reads sql data begin set @sal = 0; # 定义一个用户变量 select salary into @sal from employees where last_name = empName; return @sal; end $$ delimiter ; select myf3('Kochhar')$;
流程控制结构
顺序结构:程序从上往下依次执行
分支结构: 程序从两条或多条路径中选择一条去执行
循环结构:满足一定条件基础上。重复执行一段代码
分支结构:
if函数: 实现简单的双分支
select if(B1,B2,B3)
如果B1成立,则if函数返回B2的值,否则返回B3的值 任何地方
语法:
case 变量|表达式|字段
when 判断的值 then 返回值 |语句
when 判断的值 then 返回值 |语句
when 判断的值 then 返回值 |语句
else 要返会的值 n |语句
end
语法:
case
when 条件 then 返回值 |语句
when 条件 then 返回值 |语句
when 条件 then 返回值 |语句
else 要返会的值 n |语句
end
delimiter $ create procedure testcase(in sal int) begin case when sal>=90 then select 'A'; when sal>=80 then select 'B'; when sal>=70 then select 'C'; else select 'D'; end case; end $ call testcase(82)$
delimiter $$ create function testif(socre int) returns char no sql begin if socre>=90 and socre <=100 then return 'A'; elseif socre>=80 then return 'B'; elseif socre>=70 then return 'C'; else return 'E'; end if; end $$ delimiter ; select testif(89)$;
# 批量插入 delimiter $ create procedure pro_while1(in insertCount int) begin declare i int default 1; a:while i<=insertCount do insert into db01.tab1(id, age) values(i,i*10); set i = i + 1; end while a ; end $ call pro_while1(7)$; select * from tab1;
delimiter $ create procedure pro_while2(in insertCount int) begin declare i int default 1; a:while i<insertCount do insert into tab1(id, age) values(i,i*10); if i>=20 then leave a; end if; set i = i+1; end while a; end $ call pro_while2(21); select * from tab1;
delimiter $ create procedure pro_while3(in insertCount int) begin declare i int default 0; a:while i<insertCount do set i = i+1; if mod(i,2)!=0 then iterate a; end if; insert into tab1(id, age) values(i,i*10); end while a; end $ call pro_while3(30); select * from tab1;