首页 > 代码库 > mysql中的过程procedure

mysql中的过程procedure

一、创建过程语法

create procedure 过程名字(参数列表)

begin

  -- SQL语句...

end

-- 创建存储过程
delimiter $$
create procedure my_act()
begin
    select * from goods;
end
$$
delimiter ;

二、查看过程

-- 查看所有过程
show procedure status [like ‘pattern‘];

-- 查看过程创建语句
show create procedure 过程名字;

三、过程调用

-- 过程调用
call 过程名字();

四、过程删除

-- 删除过程
drop procedure 过程名字;

五、过程参数详解
  相比函数,过程的参数多了三种限定修饰符:

  1. in    -- 值传递, 参数可以是数值或变量, 过程内部的修改不会对外部造成影响。

  2. out   -- 引用传递, 参数只能是变量。在使用前变量的数据会被置空。在过程调用结束后, 才会把过程中产生的值传给外部变量。

  3. inout  -- 引用传递, 参数只能是变量. 可以把外部的数据传给内部使用, 内部的修改也会作用到外部。同样是在调用结束后,才会改变外部的值。

  使用方式:create procedure 过程名([in 参数名 参数类型,][out 参数名 参数类型,][inout 参数名, 参数类型])

-- 创建全局变量
set @ga = 1;
set @gb = 2;
set @gc = 3;

-- 过程参数示例
delimiter $$
create procedure pro_demo(in x int, out y int, inout z int)
begin
    -- 查看数据进入过程后的变化
    select x, y, z;    
    
    -- 修改局部变量的值
    set x = 100;
    set y = 200;
    set z = 300;
    
    -- 查看局部变量的值
    select x, y, z;
    
    -- 查看全局变量的值以观察局部变量的修改对全局有没有影响
    select @ga, @gb,@gc;

    -- 修改全局变量的值
    set @ga = a;
    set @gb = b;
    set @gc = c;

    -- 查看调用结束前全局变量的值以观察过程调用结束后对全局变量的改变
    select @ga, @gb, @gc;
end
$$
delimiter ;

-- 调用过程
call pro_demo(@ga, @gb, @gc);

-- 过程调用结束后再次观察全局变量的值
select @ga, @gb, @gc;

 

mysql中的过程procedure