语法
CREATE PROCEDURE 过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 ...] 过程体
DELIMITER // CREATE PROCEDURE myproc(OUT s int) BEGIN SELECT COUNT(*) INTO s FROM students; END // DELIMITER ;
MySQL默认以";"为分隔符,如果没有声明分割符,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错,所以要事先用“DELIMITER //”声明当前段分隔符,让编译器把两个"//"之间的内容当做存储过程的代码,不会执行这些代码;“DELIMITER ;”的意为把分隔符还原。
IN|OUT|INOUT参数:
IN:输入值 OUT:可返回值 INOUT:输入输入值
变量定义
语法:SET 变量名 = 变量值 [,变量名= 变量值 ...]
调用存储过程
CALL 函数名(参数);
删除存储过程
DROP PROCEDURE 函数名;
示例:
-- 初始化用户存储过程 DELIMITER // create procedure delete_user(in p_in varchar(11)) BEGIN delete from t_customer_coupons where customer_phone = p_in; delete from t_customer where PHONE = p_in; END // DELIMITER ;
条件语句
IF-THEN-ELSE语句
DROP PROCEDURE IF EXISTS proc3; DELIMITER // CREATE PROCEDURE proc3(IN parameter int) BEGIN DECLARE var int; SET var=parameter+1; IF var=0 THEN INSERT INTO t VALUES (17); END IF ; IF parameter=0 THEN UPDATE t SET s1=s1+1; ELSE UPDATE t SET s1=s1+2; END IF ; END ; // DELIMITER ;
CASE-WHEN-THEN-ELSE语句
DELIMITER // CREATE PROCEDURE proc4 (IN parameter INT) BEGIN DECLARE var INT; SET var=parameter+1; CASE var WHEN 0 THEN INSERT INTO t VALUES (17); WHEN 1 THEN INSERT INTO t VALUES (18); ELSE INSERT INTO t VALUES (19); END CASE ; END ; // DELIMITER ;
WHILE-DO…END-WHILE
DELIMITER // CREATE PROCEDURE proc5() BEGIN DECLARE var INT; SET var=0; WHILE var<6 DO INSERT INTO t VALUES (var); SET var=var+1; END WHILE ; END; // DELIMITER ;
mysql详细介绍请看该文章:https://www.cnblogs.com/mark-chan/p/5384139.html