前言
Github:https://github.com/yihonglei/road-of-arch/tree/master/thinking-in-mysql
概述
MySql 存储过程参数有 IN、OUT、INOUT 三种模式。
一 实例准备条件
创建表:
CREATE TABLE `t_user_main` ( `f_userId` int(10) NOT NULL AUTO_INCREMENT COMMENT '用户id,作为主键', `f_userName` varchar(5) DEFAULT NULL COMMENT '用户名', `f_age` int(3) DEFAULT NULL COMMENT '年龄', PRIMARY KEY (`f_userId`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
插入数据:
INSERT INTO t_user_main (f_userName, f_age) VALUES('one',24),('two',25),('three',26),('four',27),('five',28),('six',29);
二 IN 模式 : 参数输入模式
DELIMITER $$ # 定界符 CREATE PROCEDURE user_main_pro1(IN v_id INT) BEGIN #定义变量 DECLARE v_userName VARCHAR(50); #通过select...into...给变量赋值 SELECT f_userName INTO v_userName FROM t_user_main WHERE f_userId = v_id; #执行DDL语句 INSERT INTO t_user_main (f_userName) VALUES (v_userName); END $$ #存储过程创建结束 DELIMITER; #恢复mysql分号定界符
调用:

三 OUT 模式 : 参数输出模式
DELIMITER $$ CREATE PROCEDURE user_main_pro2(OUT v_count INT) BEGIN SELECT COUNT(*) INTO v_count FROM t_user_main; END $$ DELIMITER
调用:

定义存储过程 user_main_pro2 用于计算 t_user_main 表的用户总数,处理完后通过参数 out 模式返回处理结果,
命令窗口通过 set @v_count = 1; 定义变量并初始化,通过定义的变量去接受存储过程处理完成 out 输出的结果,
最后通过 select @v_count 查看接受后的变量值,也即是存储过程处理完成的结果。
四 INOUT 模式 : 作为输入和输出模式
DELIMITER $$ CREATE PROCEDURE user_main_pro3(INOUT v_id INT) BEGIN # 定义变量 DECLARE v_count INT(11); # 判断 IF v_id > 3 THEN SET v_count = 100; ELSE SET v_count = 500; END IF; # 返回赋值 SET v_id = v_count; END $$ DELIMITER;
调用:

新建存储过程 user_main_pro3,参数模式为 INOUT 模式,该模式参数既作为输入,也可作为输出。
定义一个变量 set @v_id=1,通过call user_main_pro3(@v_id)调用存储过程,
将参数 @v_id 输入后满足判断的 else,存储过程处理结果为 500,同时也通过
变量 @v_id 接受存储过程处理的结果。
所以,INOUT 模式参数 v_id 既可以作为输入,也可以作为输出。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231190.html原文链接:https://javaforall.net
