mysql存储过程

存储过程(Stored Procedure):是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

创建存储过程:

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

begin

    sql语句代码块

end

被括号包围的参数列必须是存在的,没有参数则置空()。

实例:

delimiter //
create procedure proc(out o int)
begin
select count(*) into o from t;
end
//
delimiter;

(1)”delimiter“为分隔符,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。

(2)存储过程可能有输入(IN)、输出(OUT)和输入输出(INOUT)参数,多个参数用逗号分隔。

(3)过程体的开始与结束使用begin与end标识。

参数:

存储过程的定义共有三种参数类型,分别为IN、OUT和INOUT,形式如下:

create procedure 存储过程名([IN|OUT|INOUT] 参数名 数据类型,...)

    IN输入参数:该参数的值由调用过程时指定,在存储过程中修改该值不能被返回。

    OUT输出参数:该参数的值在存储过程中可以被修改并返回。

    INOUT输入输出参数:该参数的值由调用过程时指定,在存储过程中可以被修改并返回。

示例:

(1)IN参数

        DELIMITER //

        CREATE PROCEDURE demo_in(IN p_in INT)

        BEGIN

            SELECT p_in;

            SET p_in = 2;

            SELECT p_in;

        END;

        //

        DELIMITER;

        执行: 

        SET @p_in = 1;

        CALL demo_in(@p_in);   

          p_in  

        --------

               1

          p_in  

        --------

               2

        SELECT @p_in;   

        @p_in   

        --------

        1       

(2)OUT参数

        DELIMITER //

        CREATE PROCEDURE demo_out(OUT p_out INT)

        BEGIN

        SELECT p_out;

        SET p_out = 2;

        SELECT p_out;

        END;

        //

        DELIMITER;

        执行: 

        SET @p_out = 1;

        CALL demo_out(@p_out);        

         p_out  

        --------

          (NULL)

         p_out  

        --------

               2

        SELECT @p_out;   

        @p_out  

        --------

        2       

(3)INOUT参数

        DELIMITER //

        CREATE PROCEDURE demo_inout(INOUT p_inout INT)

        BEGIN

        SELECT p_inout;

        SET p_inout = 2;

        SELECT p_inout;

        END;

        //

        DELIMITER;

        执行:   

        SET @p_inout = 1;

        CALL demo_inout(@p_inout);        

        p_inout  

        ---------

                1

        p_inout  

        ---------

                2

        SELECT @p_inout;

        @p_inout  

        ----------

        2         

变量:

(1)变量定义:

DECLARE name datatype [Default value];

其中,datatype为mysql的数据类型,如int,float,date,varchar(length)

(2)变量赋值:

SET 变量名 = 表达式值 [,variable_name = expression ...]

(3)用户自定义变量:

例如:select 'Hello world!' into @x ;

            set @y='Hello world!';

            在存储过程可以使用用户定义变量。

删除存储过程:DROP PROCEDURE  IF  EXISTS存储过程名

查看一个存储过程:SHOW CREATE PROCEDURE 存储过程名

查看所有存储过程:SHOW PROCEDURE STATUS

修改存储过程:ALTER PROCEDURE procedure_name [characteristic ...],这里的修改只能修改过程的特征,无法修改代码,若项修改代码,只能先删除再新建。




你可能感兴趣的:(mysql,存储过程)