最近公司的项目是关于数据库检测的,用的是mysql数据库,需要写存储过程。之前写过mysql,不过都是几张表之间的查询,一些比较浅显的用法,这次使用存储过程,我还是第一次听说。于是星期天看了一下学了一天内容,基本上有点了解,写这个博客主要是为了检测到底会记住了多少。
工欲善其事,必先利其器,之前使用的数据库工具一直是Navicat Premium ,挺好的一个软件,但是写存储过程就比较不好了,不能调试,于是在网上查了一下可以调试数据库的工具终于找到了,dbforge studio for mysql 这是个付费软件,本人现在比较穷,搜了一个破解版的安装上了,工具调试与程序设计语言差不多,非常好用。
闲话不多说,我是在navicat上面创建一个存储过程,然后再跳转到dbforge里面进行编写,因为在dbforge上面创建存储过程会出现一些问题,而这个问题我一直不知道怎么解决,于是在navicat上面创建
步骤一:drop procedure if exists 存储过程名称
步骤二:delimiter//
步骤三:create procedure 存储过程名称(参数1,参数2....);
begin
end
在begin 与end里面编写数据库代码,所需要知道的是声明declare 加变量名称 再加变量类型,记得用冒号结尾,几大类型就不必多说,整形,字符型等等,有一个是极为重要的是如何分别提取存储表的内容,此处可以使用游标 declare 名称 cursor for +查询语句,这样就可以把后面查询出来的表名给存储到名称中,那么如何获取表中的内容呢?
可以使用循环语句while或者for来进行获取
首先使用游标声明记录表的行数count
然后将游标打开 open 游标名称,将游标内容赋值给变量 fetch 游标名 into 变量名
使用变量名为循环次数,做while循环。再打开表的游标,将表的字段复制给变量名称,有几个字段就赋值给几个变量,比如一张student表中有id,sex,name,申明时
declare id varchar(20);
declare sex varchar(20);
declare name varchar(20);
declare id_sex_name cursor for select id,sex,name from student;
open id_sex_name;
fetch id_sex_name into id,sex,name;
这个就是游标的内容,其他的就是查询,你可以在存储过程中直接查询使用select语句,也可以使用字符串语句最后执行
prepare pres for @sql
execute @sql
deallocate @sql
这样也可以得到查询结果。其他需要注意的是if语句后面要跟着then ,if语句结束后需要加end if ,其他和编程语言逻辑差不多,都一样,注意其中的区别便是