您的位置:首页 > 数据库 > MySQL

mysql基础---存储过程及变量定义(十)

2016-12-07 11:55 459 查看
存储过程
-定义:带有逻辑的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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: