mysql workbench使用存储过程

来源:互联网 发布:清楚淘宝浏览记录 编辑:程序博客网 时间:2024/05/17 21:42

MySQL 使用存储过程

先来了解一下什么是mysql的存储过程:
Mysql存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。
要注意的地方:
1.不能在一个存储过程里定义另一个存储过程,但可以调用另一个存储过程
2.编译器为了区分存储过程和普通sql语句,在写存储过程是需要定义分割符来分割delimiter $$
如:

delimiter $$create procedure p(in a int)beginset a=2;select a;end;$$

否则编译器会报错
3.同一个名称的存储过程只能创建一次,再次创建需要把原来的删了。

实战例子:
学生表:
CREATE TABLE [dbo].[Student](
[StudentID] [int] IDENTITY(1,1) NOT NULL, –主键
[Number] varchar NULL, –学号
[Name] nchar NULL, –学生姓名
[ClassID] [int] NOT NULL –学生所在班级ID
)
班级表:
create table Class(
[ClassID] [int] IDENTITY(1,1) NOT NULL, –班级ID
[Code] varchar NULL, –班级编号
[ClassName] nchar NULL –班级名
)
插入班级数据:
insert into Class select ‘003’,’计算机3班’
insert into Class select ‘001’,’计算机1班’
insert into Class select ‘002’,’计算机2班’
insert into Class select ‘005’,’计算机5班’
insert into Class select ‘004’,’计算机4班’
任课老师:
create table Teacher(
[TeacherID] [int] IDENTITY(1,1) NOT NULL, –老师ID
[TeacherName] nchar NULL, –老师名称
[ClassID] [int] NOT NULL – 老师所教的班级ID
)
插入数据:
insert into Teacher select ‘陈老师’, 1
insert into Teacher select ‘李老师’, 3
insert into Teacher select ‘王老师’, 2
insert into Teacher select ‘赵老师’, 5
要求:编写一个可分页的存储过程,返回所有已安排了某任课老师的学生。要求:每页显示10条数据,页码和某任课老师可作为参数传入。需要列出学生的姓名、学号、以及学生所在的班级名和班级编号。
直接在workbench上的查询页面上输入下面代码:(’#’为我添加的注释,可去掉)

use dbo;DELIMITER $$CREATE DEFINER=`kjs`@`%` PROCEDURE `proc`(in pageindex int,in teacherName nvarchar(8))begindeclare ssql varchar(4000);#定义变量declare sstart int;declare send int;set sstart=(pageindex-1)*10;#设置sstart的值set send=pageindex*10-1;set @ssql=concat('select student.Name,student.Number,class.ClassName,class.Code fromstudent join class join teacher where student.ClassId=class.ClassID and class.ClassID=teacher.ClassID and teacher.TeacherName="',teacherName,'" limit ',sstart,',',send);#拼接数据库字符串prepare ssql from @ssql;#准备存储过程数据库执行语句execute ssql;#执行数据库语句deallocate prepare ssql;#结束后删除该准备end$$

运行即可,可以见到这dbo数据库里的routines中生成了一个名为proc的存储过程,如图:
这里写图片描述
那么如何测试存储过程呢?
很简单,在查询页面上调用该proc存储过程,并输入相应的参数即可

use dbo;call proc(1,"李老师")

更多请查看参考的相关链接点击更多内容

0 0
原创粉丝点击