MySQL存储过程
程裕强 人气:0MySQL的存储过程
存储过程是数据库的一个重要的功能,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 ;
分隔符
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;
2、通过游标遍历结果集
create table demo.test( 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;
call demo.p_test2();
SELECT * from demo.test;
总结
加载全部内容