存储过程


-定义:带有逻辑的sql语句

-特点:1.执行效率快,存储过程是在数据库的服务器端执行的!!!

   2.移植性差,不同数据库的存储过程是不能移植的。

-补充:

-全局变量:mysql的数据库内置变量

-查看所有全局变量:show variables

-查看某个全局变量:select @@变量名

-修改全局变量:set 变量名=新值

-会话变量:只存在于当前客户端与数据库服务器端的一次连接当中。如果链接断开,会话变量会失效。

-定义会话变量:set @变量 = '值'

-查看会话变量;select @变量名

-局部变量:在存储过程中使用的变量叫做局部变量,只要在存储过程执行完毕,局部变量就会失去。

-call pro_testOut(@name);

1.语法:

  --创建存储过程

 delimiter $   --声明结束符号

 create procedure pro_test()     --存储过程名称(参数列表)

 begin

--可以写多个sql语句 +流程控制

select * from dept;

 end $



 --执行存储过程

 call pro_test();      --call 存储过程名称(参数);   

 --删除存储过程

 drop procedure pro_test;



2.参数:

1.)in:表示输入参数,可以携带数据带存储过程中

      --创建输入参数的存储过程

       delimiter $

       create procedure pro_findById(in eid int)  --in 输入参数

       begin 

            select * from employee where id=eid;

       end &

     --调用

       call pro_findById(22);  --(数据库中存在的值)



2.)out:表示输出参数,可以从存储过程中返回结果

      --创建输出参数的存储过程

       delimiter $

       create procedure pro_testOut(out str varchar(20))  --in 输入参数

       begin 

     set str = '这是一个输出参数';

       end &

      --调用

       call pro_testOut(@name); --定义会话变量声明

      --查看输出的值

select @name;


3.)inout:表示输入输出参数,既可以输入,也可以输出。


      --创建输出参数的存储过程

       delimiter $

       create procedure pro_testInOut(inout n int)  --in 输入参数

       begin 

--查看变量

       select n;

set n=500;

       end &

      --调用

set @n=10;

        call pro_testInOut(@n); --定义会话变量声明

     --查看输出的值

select @n;

4.)带有条件判断的存储过程

-输入1-7整数,返回星期几

--创建判断存储过程

delimiter $

create procedure pro_testIf(in num int,out str varchar(20))

begin

if num=1 then

set str='星期一';

elseif num=2 then

set str='星期二';

elseif num=3 then

set str='星期三';

elseif num=4 then

set str='星期四';

elseif num=5 then

set str='星期五';

elseif num=6 then

set str='星期六';

elseif num=7 then

set str='星期日';

else 

set str='输入错误';

end if;

end $

--调用

call pro_testIf(1,@str);

--查看输出信息

select @str;

 5.)循环格式的存储过程

输入一个整数,求和。列如:输入100,统计1-100的和。

         --创建循环的存储过程

      delimiter $

create procedure pro_testWhile(in num int,out result int)

begin 

declare i int default 1;   --定义局部变量

declare vnum int default 0; 

while i<num do

set vnum=vnum+1;

set i=i+1;

end while;

set result=vnum;

end $

--调用

call pro_testWhile(100,@result);

--查看输出信息

          select @result;