【基础】存储过程IN、OUT、INOUT参数模式

前言

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 既可以作为输入,也可以作为输出。

  • 15
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值