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)
posted on 2020-06-10 20:08 hopeless-dream 阅读(158) 评论(0) 编辑 收藏 举报