定义存储过程格式:
create procedure 存储过程名(参数)
begin
...
select 要返回的内容;
end;
1 定义一个简单的存储过程
create procedure test()
begin
select * from specialty;
end;
call test;
create procedure test1()
begin
-- declare定义变量
declare s_count int default 0 ;
declare s_result varchar(100);
-- select直接加内容表示返回,存储过程遇到第一个select直接加内容就直接返回了,不会执行后边的语句
#select s_count+10;
-- set为变量赋值
set s_count = 100;
-- 使用into将查询结果赋值给变量
select count(1) into s_count from specialty;
if s_count > 5 then
set s_result = '个数大于5';
else
set s_result = '个数不大于5';
end if;
select s_result;
end;
call test1();
-- 创建带有参数的存储过程,如果写了参数,则调用时必须 传递
-- 参数类型【in】:输入参数,默认类型。注意,in参数是只读的,就是说即使在存储过程中改变了in类型参数的值,存储过程结束后仍保留期原始值
create procedure test2(in flag tinyint)
begin
declare result varchar(100);
if flag=0 then
set result = '假';
else
set result = '真';
end if;
select result,flag;
end;
call test2(true);
-- 参数类型【out】:输出参数,可以作为返回值。注意,存储过程在启动时无法访问out参数的初始值
create procedure test3(in flag tinyint, out result varchar(20))
begin
-- 因为无法访问out类型的result初始值,所以这个条件永远不会满足
if flag=0 and result='a' then
set result = '假的';
else
set result = '真';
end if;
select result;
end;
set @a := 'a';
call test3(false,@a);
select @a;
-- 参数类型【inout】存储过程可以修改INOUT参数也可以获取其初始值并将新值传递回调用程序
create procedure test4(inout result varchar(10))
begin
if result = 'a' then
set result = 'aaa';
else
set result = 'bbb';
end if;
end;
set @a := 'b';
call test4(@a);
select @a;
-- 创建一个存储过程,根据月份判断季度
create procedure judgmentQuarter(in month int, out quarter varchar(10))
begin
case
when month >= 1 and month <=3 then
set quarter = '第一季度';
when month >= 4 and month <= 6 then
set quarter = '第二季度';
when month >= 7 and month <= 9 then
set quarter = '第三季度';
else
set quarter = '第四季度';
end case;
end;
call judgmentQuarter(12,@quarter);
select @quarter;
-- 删除存储过程
drop procedure test3;
-- 查看存储过程的创建语句
show create procedure test1;
-- 查看shixun数据库的所有存储过程
select name from mysql.proc where db='shixun';
-- 查看存储过程的状态信息
show procedure status;
标签:存储,set,end,--,result,MySql,过程,select
From: https://www.cnblogs.com/ccx-lly/p/16939408.html