一、什么叫存储过程
类似于编程语言中的函数(方法),可以再存储过程中会总封装一组SQL代码,已完成某种特定的功能
二、存储过程的分类
存储过程包含存储过程和存储函数
存储过程和存储函数的区别:
1、存储函数有且只有一个返回值,而存储过程不能有返回值,但可以有返回参数
2、存储函数只能有输入参数,并不能显示指定in,而存储过程可以有多个in、out、inout的参数
3、存储过程过程功能强大,存储过程可以实现比较复杂的业务逻辑,存储函数有比较多的限制,不能在函数中使用insert,update等语句存储函数只能完成查询工作,可以接受输入参数并返回一个结果,函数的功能针对性更强
4、储存过程可以调用存储函数,存储函数不能调用存储过程
5、存储过程一般作为一个独立的部分执行call proc_Name()
而函数可以作为查询的一部分进行调用
select fun_Name();
三、存储过程
语法:
-- 创建存储过程
create procedure pro_Name
begin
代码块
end;
参数类型:
in -- 输入参数,默认
out -- 输出参数 执行完存储过程之后返回的一个结果的参数值可以在存储过程外接受参数
inout -- 输入输出参数,即使输入参数也是输出参数,相当于开发中编程语言的全局变量,而declare定义的就相当于是局部变量,只能在procedure里面使用
调用 call pro_Name()
-- 在存储过程中声明变量 declare name varchar(20);
-- 在存储过程外面声明变量 set @num = 0;
声明变量
mysql中定义变量使用关键词declare,变量名以@符号开头,默认值使用default
例子:
declare @num int default 100;-- 在存储过程中申明变量初始化默认值需要使用default
查询赋值:
select count(*) into @num from tableName; -- into将查到的数据赋值给变量
set @num = (select count(*) from tableName);-- set将查到的数据赋值给变量
ifnull(@name,'没有数据')-- 如果@name为空输出没有数据
如:
select ifnull(user.userName,'没有数据') where userName = 'xiaoge'
删除函数或存储过程
drop function/procedure Name 删除函数或存储过程
查看源代码
show create function/procedure Name--查看源代码
例子:
-- 无参数存储过程
create procedure proc_name()
begin
declare @num int;-- 声明变量(申明变量使用declare关键字)
select count(*) into @num from tableName;-- 查询语句,查询时给变量赋值 使用关键字into 如: a into b --把a赋给b
select @num as '总人数';-- 输出@num的值,取名为总人数
end;
-- 调用存储过程
call proc_Name();
-- 有参数存储过程
create procedure proc_Name(in id int)
bengin
declare @name varchar(20) ;
select stuName into @name from student where stuId = id;
select @name as '姓名';
end;
set @id = 1;-- 在mysql中声明变量(在存储过程外声明变量不需要使用关键字declare)
call proc_Name(@id);-- 调用存储过程
-- 有输出参数的存储过程
create procedure proc_Name(stuId int,out num int)
begin
select count(*) into num from student where id > stuId;
end;
call proc_Name(1,@count);
select @count; -- * 在外界声明变量是可以保存数据的
-- 输入输入参数的存储过程
create procedure proc_Name(inout id int)
begin
set id=10+id;
end;
set @id = 5;
call proc_Name(@id);
select @id as '总和';
四、存储函数
1、参数只能是输入参数,并且不能指定in
2、函数必须要有一个返回值
3、使用 函数名(参数)
语法:
create function 函数名(参数)
returns 数据类型
begin
代码块
return 数据类型;
end;
例子:
-- 没有参数的函数
create function fun_Name()
returns int-- 声明返回值的数据类型*注意在理不能加分号
begin
declare @num int;
select count(*) into @num from student;
return @num;-- 返回返回值
end;
select fun_Name() as '总人数';-- 直接调用输出
set @num=fun_Name();
select @num as '总人数';
-- 有参数的函数
create function fun_Name(stuId int)
returns varchar(20)
begin
declare @stunames varchar(20);
select stuName into @stunames from student where id = stuId;
return @stunames;
end;
select ifnull(fun_Name(1),'没有数据') as '姓名';