Mysql 存储过程 简单案例

1.in单条件查询存储过程

CREATE PROCEDURE `sp1`(IN `t1parm` varchar(50))

BEGIN

         Select * from test1 where t1=t1parm;

END

 

call sp1('1874')

 

set @num = '1874';

call sp1(@num);

注意 参数必须有@,否则Unknown system variable 'num'

 

2.out返回值存储过程

CREATE PROCEDURE `sp2`(OUT count int)

BEGIN

      Select Count(0) into count from test1;

END

 

call sp3(@count);

Select @count;

注意 返回参数不需要定义,不能赋值,否则返回null

 

3.inout返回值存储过程

CREATE PROCEDURE `sp2`(IN `t1parm` varchar(50),inout count int)

BEGIN

         Select count(0) into count from test1 where t1=t1parm;

END

call sp2('1874',@count);

Select @count;

注意 inout 可以赋值,也可以使用,但是后期会被改变并返回

 

4.Declare定义变量的存储过程

CREATE PROCEDURE `sp4`()

BEGIN

         DECLARE l_int int default 4;

         Select l_int;

END

DECLARE局部变量,该关键字必须在存储过程中Begin…End使用,作用域也只能存在于Begin…End中,定义变量不需要加@

 

5.Set定义变量的存储过程

CREATE PROCEDURE `sp5`()

BEGIN

         SET @t1=0, @t2=1, @t3=2;

         Select @t1,@t2,@t3;

END

不需要定义,直接赋值,根据赋值来定义变量类型

 

6.Select定义变量的存储过程

使用:=来赋值

CREATE PROCEDURE `sp6`()

BEGIN

         SELECT @t1:=@t2:[email protected]:=400,@t1,@t2,@t3;

END

带@的变量叫会话变量、用户变量,作用域在一个会话中,如:

Mysql 存储过程 简单案例

在这个会话中,执行完存储过程了,再去查询这个变量,依然会生效。

 

7.游标存储过程

CREATE PROCEDURE `sp7`()

BEGIN

    DECLARE _t1 varchar(50);-- 定义变量作为查询的返回值

                   DECLARE _OK INT(11) DEFAULT 1;-- 是否继续循环的状态

                   -- DECLARE _AutoInt INT(11) DEFAULT 1;-- 定义自增量

    DECLARE cur CURSOR

                   for

                   Select t1 from test1 where t1=362; -- 定义游标

                   -- DECLARE CONTINUE HANDLER FOR NOT FOUND SET _OK = 0; -- 若没有数据返回,程序继续,并将变量_OK设为0

                   DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET _OK = 0; -- 若没有数据返回,触发SQLSTATE '02000',程序继续,并将变量_OK设为0  另一种写法

        

    OPEN cur;-- 打开游标

                   FETCH cur INTO _t1;-- FETCH用来检索当前行的t1列到_t1局部变量中

                            WHILE  _OK != 0 DO -- 循环体 / 根据没有数据返回改变变量为0停止循环

                                     

                                     update test1 Set t3:=CONCAT(t1,t3) where t1=_t1;

                                     -- Set _AutoInt = _AutoInt + 1;

                                    

                                     FETCH cur INTO _t1;

                            END WHILE;

                   CLOSE cur;-- 关闭游标

END

注:MySQL游标只能用于存储过程(和函数)