MySQL存储过程

存储过程是一组SQL语句集实现比较复杂的逻辑功能,存储过程跟触发器类似,存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事出发后自动调用。

存储过程弊端

  • 不同类型数据库语法有差别,移植困难。
  • 过多业务逻辑写入存储过程不利于维护,不利于分层管理。

1.创建存储过程

案例1:计算两数之和

DROP PROCUDURE IF EXISTS `adder`;
DELIMITER;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `adder`(IN a int, IN b int)
BEGIN
  DECLARE c int;

  IF a IS NULL THEN SET a=0;
  END IF;

  IF b IS NULL THEN SET b=0;
  END IF;

  SET c=a+b;
  SELECT c AS sum;
END
;;
DELIMITER;

调用存储过程

call add(1,2);

执行存储过程

set @a = 1;
set @b = 2;
call add(@a,@b);

语法

CREATE PROCEDURE procedure_name(
  [int|out|inout] parameter datatype
)
BEGIN
  statement;
END

案例2:查询记录数

CREATE PROCEDURE num_from_employee(IN emp_id INT, OUT count_num INT)
READS SQL DATA
BEGIN
  SELECT COUNT(*) AS count_num FROM employee WHERE id=emp_id;
END

2.IF条件控制

DROP PROCEDURE IF EXISTS `procIf`;
DELIMITER;;
CREATE DEFINE=`root`@`localhost` PROCEDURE `procIf`(IN type int)
ENGIN
  DECLARE c varchar(255);

  IF type=0 THEN SET c='parameter is 0';
  ELSEIF type=1 THEN SET c='parameter is 1';
  ELSE SET c='parameter is others, not 0 or 1';
  
  SELECT c;
END
;;
DELIMITER;

执行

SET @type=1;
CALL procIf(@type);

3.CASE条件控制

DROP PROCEDURE IF EXISTS `procCase`;
DELIMITER;;
CREATE DEFINE='root'@'localhost' PROCEDURE `procCase`(IN type int)
BEGIN
  DECLARE c varchar(255);

  CASE type
  WHEN 0 THEN SET c='parameter is 0';
  WHEN 1 THEN SET c='parameter is 1';
  ELSE SET c='parameter is others, not 0 or 1';
  END CASE;

  SELECT c;
END
;;
DELIMITER;

4.WHILE循环控制语句

DROP PROCEDURE IF EXISTS `procWhile`;
DELIMTER;;
BEGIN
  DECLARE i int;
  DECLAR j int;

  SET i=0;
  SET j=0;
  WHILE i<=n DO
    SET s = s+i;
    SET i = i+1;
  END WHILE;

  SELECT s;
END
;;
DELIMITER;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 任务需求:定时执行的任务,调用存储过程,进行数据迁移。 存储过程相关总结:(存储过程的创建 不能伴随有if exi...
    时待吾阅读 3,129评论 0 4
  • 转载自这里 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Sto...
    杜七阅读 2,422评论 4 27
  • 原文链接 MySQL存储过程详解 1.存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然...
    亚斯咪妮阅读 2,686评论 1 30
  • 课程回顾 自定义函数:简称UDF;是对MySQL扩展的一种途径 创建自定义函数:CREATE FUNCTION.....
    齐天大圣李圣杰阅读 689评论 0 0
  • 1.认真 2.敬业 3.慷慨 4.谦虚谨慎 5.注重养生 6.计划周密 7.不挑拨离间搬弄是非 8.单纯 9.简单...
    蝈蝈的窝阅读 182评论 0 0