MySQL存储过程---基础

存储过程

语法

DELIMITER $$

CREATE PROCEDURE `employees`.`a`(参数列表)

    BEGIN
    sql1;
    sql2;
    ...
END$$ DELIMITER ;

语法说明

DELIMITER $$:定义语句结束标记,存储过程体中,每条SQL都使用“;”结束,所有语句作为一个过程体执行,如果过程体中只有一条SQL语句,可以省略begin和end

参数列表:参数模式 参数名 参数类型
参数模式 :
  IN : 输入参数,单独传参。in 是参数的默认模式,这种模式就是在程序运行的时候已经具有值,在程序体中值不会改变。
  OUT : 输出参数,作为返回值的参数。
  INOUT: 既输入有输出,可做输入也可做输出。

in 是参数的默认模式,这种模式就是在程序运行的时候已经具有值,在程序体中值不会改变。

out 模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递回调用他的过程

in out 表示高参数可以向该过程中传递值,也可以将某个值传出去

调用存储过程

CALL 存储过程名(实参列表)

实例

创建空参数的存储过程

DELIMITER $$

USE `world`$$

DROP PROCEDURE IF EXISTS `t1`$$

CREATE DEFINER=`root`@`10.0.0.%` PROCEDURE `t1`()
BEGIN
SELECT COUNT(*) FROM world.city;
END$$

DELIMITER ;

 调用

CALL t1()

创建带out参数的存储过程

DELIMITER $$

CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    PROCEDURE `world`.`t2`( IN num INT,OUT num1 INT)
    /*LANGUAGE SQL
    | [NOT] DETERMINISTIC
    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
    | SQL SECURITY { DEFINER | INVOKER }
    | COMMENT 'string'*/
    BEGIN
    INSERT INTO t2 VALUES(num);
    SELECT COUNT(*) INTO num1 FROM t2;
    SELECT num1;
    END$$

DELIMITER ;

调用

SET @n2:=0;
CALL t2(2,@n2)
SELECT * FROM t2;

带inout参数的存储过程

DELIMITER $$

CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    PROCEDURE `world`.`t3`( INOUT a INT, INOUT b INT, OUT c INT)
    /*LANGUAGE SQL
    | [NOT] DETERMINISTIC
    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
    | SQL SECURITY { DEFINER | INVOKER }
    | COMMENT 'string'*/
    BEGIN
    SELECT a*2 INTO a;
    SELECT b*2 INTO b;
    SELECT a+b INTO c;
    SELECT a,b,c;
    END$$

DELIMITER ;

调用

SET @a:=5;
SET @b:=10;
SET @c:=0;
CALL t3(@a,@b,@c)
原文地址:https://www.cnblogs.com/zh-dream/p/13088419.html