MySQL存储过程图文实例讲解
MySQL的存储过程
存储过程是数据库的一个重要的功能,MySQL 5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0开始支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。
MySQL存储过程的创建
语法
CREATE PROCEDURE 过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 …] 过程体
DELIMITER //
CREATE PROCEDURE myproc(OUT s int)
BEGIN
SELECT COUNT(*) INTO s FROM students;
END
//
DELIMITER ;
CREATE PROCEDURE myproc(OUT s int)
BEGIN
SELECT COUNT(*) INTO s FROM students;
END
//
DELIMITER ;
分隔符
MySQL默认以";"为分隔符,如果没有声明分割符,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错,所以要事先用“DELIMITER //”声明当前段分隔符,让编译器把两个"//"之间的内容当做存储过程的代码,不会执行这些代码;“DELIMITER ;”的意为把分隔符还原。
参数
存储过程根据需要可能会有输入、输出、输入输出参数,如果有多个参数用","分割开。MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT:
IN参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值OUT:该值可在存储过程内部被改变,并可返回INOUT:调用时指定,并且可被改变和返回
过程体
过程体的开始与结束使用BEGIN与END进行标识。
1、简单实例
create procedure demo.p_test1()
begin
— 使用 declare语句声明一个变量
declare id int default 0;
declare name varchar(50) default ”;
— 使用set语句给变量赋值
set id=7521;
— 将users表中id=1的名称赋值给username
select ename into name from demo.emp where empno=id;
— 返回变量
select name;
end;
begin
— 使用 declare语句声明一个变量
declare id int default 0;
declare name varchar(50) default ”;
— 使用set语句给变量赋值
set id=7521;
— 将users表中id=1的名称赋值给username
select ename into name from demo.emp where empno=id;
— 返回变量
select name;
end;
2、通过游标遍历结果集
create table demo.test(
id int,
cnt varchar(50)
)
id int,
cnt varchar(50)
)
create procedure demo.p_test2()
— 通过游标遍历结果集
begin
— 声明变量
declare id int default 0;
declare name varchar(50) default ”;
declare done boolean default 1;
— 声明游标
declare rs cursor for SELECT deptno,dname from demo.dept ;
— 定义异常:
declare continue handler for SQLSTATE ‘02000’ SET done = 0;
— 打开游标
open rs;
delete from demo.test;
while done do
begin
fetch rs into id,name;
INSERT into demo.test SELECT e.deptno,count(1) from demo.emp e WHERE e.deptno =id group by e.deptno;
end ;
end while;
— 关闭游标
close rs;
end;
— 通过游标遍历结果集
begin
— 声明变量
declare id int default 0;
declare name varchar(50) default ”;
declare done boolean default 1;
— 声明游标
declare rs cursor for SELECT deptno,dname from demo.dept ;
— 定义异常:
declare continue handler for SQLSTATE ‘02000’ SET done = 0;
— 打开游标
open rs;
delete from demo.test;
while done do
begin
fetch rs into id,name;
INSERT into demo.test SELECT e.deptno,count(1) from demo.emp e WHERE e.deptno =id group by e.deptno;
end ;
end while;
— 关闭游标
close rs;
end;
call demo.p_test2();
SELECT * from demo.test;
总结
到此这篇关于MySQL存储过程讲解的文章就介绍到这了,更多相关MySQL存储过程内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!