存储过程
1、创建
create procedure procedure_name(IN/OUT args)
begin
sql
end
示例:
create procedure proce_test1(IN a int,IN b int,OUT c int)
begin
SET c=a+b;
end;
2、调用
set @m=0;
call proce_test1(3,2,@m);
显示变量的值:select @m from dual;
3、存储过程中变量的使用
(1)局部变量:定义在存储过程开始定义,只在存储过程中有效
create procedure proce_test2(IN a int,OUT r int)
begin
declare x int default 0;
declare y int default 1;
set x= a*a;
set y= a*a;
set r =x+y;
end;
(2)用户变量:相当于全局变量,定义的用户变量可以通过select @attrname from dual;
(3)给变量设置值
无论是局部变量还是用户变量,都是使用set关键字修改值
set @n=1;
call proce_test2(6,@n);
select @n from dual;
4、将查询结果赋值给变量
create procedure proce_test3(OUT c int)
begin
select count(stu_num) into c from student;
end;
set @n=1;
call proce_test3(@n);
select @n from dual;
5、用户变量使用注意事项:因为用户变量相当于全局变量,可以在SQL指令以及多个存储过程中共享,在开发中建议少使用用户变量,用户变量过多会导致程序不易理解,难以维护。
6、存储过程中的参数:IN OUT INOUT
IN输入参数,如
OUT输出参数
INOUT 输入输出参数
7、存储过程中流程控制
(1)if
单分支
if conditions then
--sql
end if;
双分支
if conditions then
--sql
else
--sql
end if;
(2)case
create procedure proce_test8(IN c int)
begin
case a int
when 1 then
--sql
when 2 then
--sql
else
--sql3
end case;
end;
存储过程管理
(1)根据数据库名,查询当前数据库中的存储过程
show procedure status where db='db_test2';
(2)查询存储过程的创建细节
show create procedure db_test2.proc_test2;
(3)修改存储过程,指修改特征/特性
NO SQL子程序包含SQL语句,不包含读写语句
CONTAINS SQL子程序不包含SQL语句
READS SQL DATA子程序包含读数据的语句
MODIFIES SQL DATA 子程序包含写数据的语句
SQL SECURITY 指明谁有权限来执行
COMMENT "string" 标识注释信息
(4)删除存储过程
drop procedure proc_test2

浙公网安备 33010602011771号