MySQL使用存储过程


一、存储过程使用背景

  • 通过把处理封装在容易使用的单元内,简化复杂的操作
  • 不需要反复建立一系列的处理步骤,可以保证数据的完整性。简化了后续人员的使用,减少了错误发生的可能性
  • 简化对变动的管理。如果使用的表名,或者列名,或者其他内容发生变化,只需要更改存储过程,但是使用它的可以不用太过关注

    这玩意如果不好理解的话,可以将存储过程理解成一个Java中的方法

二、创建存储过程

创建一个存储过程,用于查询工资的最小值

create procedure pro_min_salary()
begin
select min(salary) as  min_salary from salaries;
end;

如果使用MySQL的命令行创建存储过程需要注意分号的处理 ;

使用call调用存储过程

call pro_min_salary();

创建存储过程还可以使用参数,比如

create procedure pro_all_salary(
out min_salary decimal(8,2),
out max_salary decimal(8,2),
out avg_salary decimal(8,2)
)
begin
    select min(salary) into min_salary from salaries;
    select max(salary) into  max_salary from salaries;
    select avg(salary) into  avg_salary from salaries;
end;

每个参数必须要指定类型,这个例子中指定了三个接受参数 ,分别是最低工资 min_salary ,最高工资 max_salary,以及平均工资 avg_salary。关键字out指的是的相应的参数是从存储过程中传出的一个值,就是返回给调用者。存储过程的代码位于begin和end之间。在这里他们是一组查询语句,用于检索值保存在相应的变量中。

OUT 从存储过程中传出

IN 传递给存储过程

INOUT对存储过程传入传出

对于它调用存储过程就变成了

call pro_all_salary(@min_salary,@max_salary,@avg_salary);

这里不会有值传出,只是调用了存储过程将值存储在了各自的变量中。在MySQL中所有的变量都得以@符号开始

这是如果查看变量的话就可以看到结果了

select @max_salary;

三、查看存储过程

查询所有存储过程

show procedure status ;

如果要查询某一个存储过程的话,可以使用like

show procedure status like '%all_%';

四、删除存储过程

删除存储过程的话 drop proceduce  存储过程名

drop procedure aaa;

这样的话如果存储过程不存在的  就会报错 [42000][1305] PROCEDURE employees.aaa does not exist

所以最好写成

drop procedure if exists aaa;

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM