MySQL在5.0版本开始有存储过程功能;
存储过程和函数是事先经过编译并存储在数据库中的一条SQL语句集合;
存储过程和函数的区别:函数必须有返回值,存储过程则没有;
1、1 创建存储过程语法形式
delimiter $$
create procedure procedure_name ([procedure_paramter,]) [characteristic...]
routine_body
$$
delimter ;
注:procedure_paramter为参数,可有可无,形式为: in/out/inout paramter_name type
routine_body为sql语句,以begin...end标识sql语句开始和结束
暂时以$$为语句结束分隔符
1、2创建函数语法形式
create function function_name ([function_paramter,]) [characteristic...]
routine_body
注:function_paramter的语法形式:paramter_name type
使用存储过程的好处:简单、安全、高性能;缺点:可能没有创建存储过程的安全访问权限;
1、执行存储过程
存储过程的执行称为调用,语句为:call,格式为:call procedure_name (procedure_paramter,..);
不带参数: call procedure_name(); 执行创建的存储过程并显示返回结果
不带参数的存储过程执行时,直接显示select语句结果
带参数:
创建带传出参数的存储过程:create procedure proc_name(out proc_parameter1 int,out proc_parameter2 int)
执行存储过程:call proc_name (@proc_parameter1,@proc_parameter2); 传出变量必须以@开头
执行这条语句不显示任何数据,它返回指定的变量,运行结果为1 rows affected
select @proc_parameter1,@proc_parameter2;执行这条语句则显示返回结果
call...和select...语句配套使用
所以,执行存储过程时,既可以显示结果,也可以不显示。
存储过程体select语句的结果保存到相应的变量,用into 关键字。
例:delimiter $$
create procedure proc_name(in emnpo int,out sum_sal int)
begin
select sum(sal) from table where table.emnpo=emnpo into sum_sal;
end $$
delimiter;
call proc_name(3,@sum_sal);
select @sum_sal;
2、创建存储过程:同1.1
3、删除存储过程:
语句格式:drop procedure procedure_name;
只给出存储过程名,不需要加()
4、检查存储过程:
show procedure status;
此语句查询包括详细信息的全部存储过程列表