mysql 中的存储过程

Posted czq_0214

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 中的存储过程相关的知识,希望对你有一定的参考价值。

创建一个简单的存储过程

存储过程proc_adder功能很简单,两个整型输入参数a和b,一个整型输出参数sum,功能就是计算输入参数a和b的结果,赋值给输出参数sum;

几点说明:

DELIMITER ;;:之前说过了,把默认的输入的结束符;替换成;;。

DEFINER:创建者;

call  : 调用存储过程,用 call 命令

-- ----------------------------
-- Procedure structure for `proc_adder`
-- ----------------------------
DROP PROCEDURE IF EXISTS `proc_adder`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_adder`(IN a int, IN b int, OUT sum int)
BEGIN
    #Routine body goes here...

    DECLARE c int;
    if a is null then set a = 0; 
    end if;
  
    if b is null then set b = 0;
    end if;

    set sum  = a + b;
END
;;
DELIMITER ;

  执行以上存储结果,验证是否正确,如下图,结果OK:

set @b=5;
call proc_adder(2,@b,@s);
select @s as sum;

存储过程中的控制语句

IF语句:

复制代码
-- ----------------------------
-- Procedure structure for `proc_if`
-- ----------------------------
DROP PROCEDURE IF EXISTS `proc_if`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_if`(IN type int)
BEGIN
    #Routine body goes here...
    DECLARE c varchar(500);
    IF type = 0 THEN
        set c = \'param is 0\';
    ELSEIF type = 1 THEN
        set c = \'param is 1\';
    ELSE
        set c = \'param is others, not 0 or 1\';
    END IF;
    select c;
END
;;
DELIMITER ;
复制代码

CASE语句:

复制代码
-- ----------------------------
-- Procedure structure for `proc_case`
-- ----------------------------
DROP PROCEDURE IF EXISTS `proc_case`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_case`(IN type int)
BEGIN
    #Routine body goes here...
    DECLARE c varchar(500);
    CASE type
    WHEN 0 THEN
        set c = \'param is 0\';
    WHEN 1 THEN
        set c = \'param is 1\';
    ELSE
        set c = \'param is others, not 0 or 1\';
    END CASE;
    select c;
END
;;
DELIMITER ;
复制代码

循环while语句:

复制代码
-- ----------------------------
-- Procedure structure for `proc_while`
-- ----------------------------
DROP PROCEDURE IF EXISTS `proc_while`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_while`(IN n int)
BEGIN
    #Routine body goes here...
    DECLARE i int;
    DECLARE s int;
    SET i = 0;
    SET s = 0;
    WHILE i <= n DO
        set s = s + i;
        set i = i + 1;
    END WHILE;
    SELECT s;
END
;;
DELIMITER ;
复制代码

以上是关于mysql 中的存储过程的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 在存储过程中的情况:错误代码:1064

16-mysql基础-mysql中的存储过程

16-mysql基础-mysql中的存储过程

MYSQL选择进入变量而不是将结果存储在存储过程中的变量中。

Mysql存储过程导出

mysql 的存储过程