系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 数据库 > Mysql > 详细页面

MySQL存储过程图文实例讲解教程

时间:2022-03-09来源:www.pcxitongcheng.com作者:电脑系统城

MySQL的存储过程

存储过程是数据库的一个重要的功能,MySQL 5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0开始支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。

MySQL存储过程的创建

语法

CREATE PROCEDURE  过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 ...] 过程体

1
2
3
4
5
6
7
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、简单实例

1
2
3
4
5
6
7
8
9
10
11
12
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、通过游标遍历结果集

1
2
3
4
create table demo.test(
    id int,
    cnt varchar(50)
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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;
1 call demo.p_test2();

1 SELECT * from  demo.test;

总结 

到此这篇关于MySQL存储过程讲解的文章就介绍到这了

分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载