MySQL存储过程中有IN,OUT,INOUT类型

-----------------------------------

## IN IN参数只用来向过程传递信息,为默认值。

## MySQL存储过程"in"参数:跟C语言的函数参数的值传递类似,MySQL存储过程内部可能会修改此参数,

## 但in类型参数的修改对调用者(caller)来说是不可见的(not visible)

mysql>use test;

mysql> drop procedure if exists pr_param_in;

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> delimiter //

mysql> create procedure pr_param_in(in id int)

-> begin

-> if (id is not null) then

-> set id=id+1;

-> end if;

-> select id as id_inner;

-> end;

-> //

Query OK, 0 rows affected (0.03 sec)

mysql> delimiter ;

mysql> set @id=10;

Query OK, 0 rows affected (0.00 sec)

mysql> call pr_param_in(@id);

+----------+

| id_inner |

+----------+

| 11 |

+----------+

1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> select @id as id_out;

+--------+

| id_out |

+--------+

| 10 |

+--------+

1 row in set (0.00 sec)

## 可以看到用户变量@id传入值为10,执行存储过程后,在过程内部值为:11(id_inner),

## 但外部变量值依旧为:10(id_out)

==================================================================================

## OUT OUT参数只用来从过程传回信息。

## MySQL存储过程"out"参数:从存储过程内部传值给调用者。

## 在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值。

mysql> drop procedure if exists pr_param_out;

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> delimiter //

mysql> create procedure pr_param_out(out id int)

-> begin

-> select id as id_inner_1;

-> if (id is not null) then

-> set id=id+1;

-> select id as id_inner_2;

-> else

-> select 1 into id;

-> end if;

-> select id as id_inner_3;

-> end;

-> //

Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;

mysql> set @id=10;

Query OK, 0 rows affected (0.00 sec)

mysql> call pr_param_out(@id);

+------------+

| id_inner_1 |

+------------+

| NULL |

+------------+

1 row in set (0.01 sec)

+------------+

| id_inner_3 |

+------------+

| 1 |

+------------+

1 row in set (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

mysql> select @id as id_out;

+--------+

| id_out |

+--------+

| 1 |

+--------+

1 row in set (0.00 sec)

## 可以看出,虽然我们设置了用户定义变量@id为10,传递@id给存储过程后,在存储过程内部,

## id的初始值总是 null(id_inner_1)。最后id值(id_out=1)传回给调用者。

===================================================================================

## INOUT INOUT参数可以向过程传递信息,如果值改变,则可再从过程外调用。

## MySQL存储过程"inout"参数跟out类似,都可以从存储过程内部传值给调用者。

## 不同的是:调用者还可以通过inout参数传递至给存储过程。

mysql> drop procedure if exists pr_param_inout;

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> delimiter //

mysql> create procedure pr_param_inout(inout id int)

-> begin

-> select id as id_inner_1;

-> if (id is not null) then

-> set id=id+1;

-> select id as id_inner_2;

-> else

-> select 1 into id;

-> end if;

-> select id as id_inner_3;

-> end;

-> //

Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;

mysql> set @id=10;

Query OK, 0 rows affected (0.00 sec)

mysql> call pr_param_inout(@id);

+------------+

| id_inner_1 |

+------------+

| 10 |

+------------+

1 row in set (0.00 sec)

+------------+

| id_inner_2 |

+------------+

| 11 |

+------------+

1 row in set (0.00 sec)

+------------+

| id_inner_3 |

+------------+

| 11 |

+------------+

1 row in set (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

mysql> select @id as id_out;

+--------+

| id_out |

+--------+

| 11 |

+--------+

1 row in set (0.00 sec)

## 从结果可以看出:我们把 @id(10)传给存储过程后,存储过程最后又把计算结果值11(id_inner_3)

## 传回给调用者。MySQL存储过程inout参数的行为跟C语言函数中的引用传值类似。

=========================================================================================

通过以上例子:

1) 如果仅仅想把数据传给MySQL存储过程,那就用in类型参数;

2) 如果仅仅从MySQL存储过程返回值,那就用out类型参数;

3) 如果需要把数据传给MySQL存储过程经过计算再传回给我们,那就用inout类型参数。

mysql 存储过程 out list_MySQL存储过程中的IN,OUT,INOUT类型 用法相关推荐

  1. mysql timestamp 差值_MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数的用法(两个日期之间的差值)...

    MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数的用法 在应用时,经常要使用这两个函数TIMESTAMPDIFF和TIMESTAMPADD. 一,TIMESTAMPDIFF 语法: ...

  2. mysql数据库blob区别_MySQL中TEXT与BLOB字段类型的区别

    在MySQL中有两个字段类型容易让人感觉混淆,那就是TEXT与BLOB,特别是自己写博客程序的博主不知道改为自己的博客正文字段选择TEXT还是BLOB类型. 下面给出几点区别: 一.主要差别 TEXT ...

  3. mysql replace报错_Mysql中replace与replace into的用法讲解

    Mysql replace与replace into都是经常会用到的功能:replace其实是做了一次update操作,而不是先delete再insert:而replace into其实与insert ...

  4. MySQL利用存储过程清除所有表中的所有记录

    MySQL利用存储过程清除所有表中的所有记录 在使用MySQL过程中,难免会出现一些测试数据,然而这些测试数据在真正部署运行的时候,通常要被清楚掉,并且自增长的字段要回复初始值.如何高效快速的实现以上 ...

  5. MySQL数据库在众多表中对表名的查询及预处理存储过程(变量做表名)

    以下的文章主要介绍的是MySQL数据库在众多表中进行表名与字段名的查询的实际操作步骤,以及对实现其查询所要用到的SQL 语句的介绍,还有两个实际解决方案的描述,以下就是文章的主要内容描述. 在MySQ ...

  6. 用于在MYSQL中创建存储过程的关键字是_下面选项中,用于在删除存储过程时,检测存储过程是否存在的关键字是_学小易找答案...

    [判断题]秦陵兵马俑三号坑设计的是 军事指挥部 . [单选题]以下不是超塑性变形特点的是:( ) [判断题]如果从表中的外键引用了主表中的值,则不能删除主表中被引用的数据. [单选题]下面选项中,用于 ...

  7. mysql 存储过程 定时_MySQL存储过程和定时任务

    什么是存储过程 存储例程是存储在数据库服务器上的一组sql语句,这些语句通过在查询中调用指定的名称来执行. 存储过程是存储在数据库中的一组SQL语句 存储过程是mysql中定义的方法 可以通过调用方法 ...

  8. 图解MySql命令行创建存储过程

    一 操作实例 首先登录mysql: 使用source命令,从命令行执行sql脚本,创建表: 创建第一个存储过程: 事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";&q ...

  9. mysql的存储过程原理_mysql存储过程原理与用法详解

    本文实例讲述了Mysql存储过程原理与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是存储过程 存储过程的创建 存储过程的使用 查看存储过程 修改存储过程 删除存储过程 首发日期:2018- ...

  10. mysql 函数 局部变量_MySQL 存储过程 存储函数 局部变量 游标 概念示例

    一个存储过程是一个可编程的函数,它可以在MySQL中创建并保存.它是由一些SQL语句和一些特殊的控制结构语句组成. 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定的功能时,存储过程是一个非 ...

最新文章

  1. clearcase 创建副本
  2. TCP/IP协议学习之TCP、IP篇
  3. Linux更换python版本 (转载)
  4. 成功解决cv2.error: OpenCV(4.1.2) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: err
  5. x和伪全面屏(18:9)关于图片切片有白条
  6. Windows下Faster R-CNN 配置/Matlab版本编译
  7. sandy引擎学习笔记: 创建一个立方体
  8. java 数据结构 数据库_数据库索引背后的数据结构
  9. 用 Python 爬取了 14 年的福彩 3D 信息!彩民们,只能帮你们到这了
  10. linux下看io等待时间,Linux下用iostat探测IO使用情况
  11. J1939 入门教程
  12. android nfc贴卡多次读写,Android Studio NFC 读写卡程序 (二)(示例代码)
  13. js 前端导出报错 格式不正确_js-xlsx 实现前端 Excel 导出(支持多 sheet)
  14. 全网最详细桥接老式无线路由器教程
  15. ssm共享充电宝管理系统计算机毕业设计
  16. 如何被猎头猎杀:猎头慕名而来的绝招
  17. 基于OpenGL的Android系统视频转换功能实现
  18. [树状数组] 洛谷P3374
  19. 7-5 偶数位特殊序列和 (40分)
  20. 业务指标基础分析(excel)--python实现

热门文章

  1. 190515每日一句
  2. 黑马程序员 Python学习笔记 之 名片管理系统
  3. Atitit 表达式概论 艾提拉著 目录 1. 表达式分类 2 1.1. 条件表达式 ?:三元符号 2 1.2. 中缀表达式 前缀 后缀表达式 2 1.3. S表达式 2 1.4. 《精通lamb
  4. Atitit 从api的使用区分工程师级别 高级 中级 初级工程师常使用的api与框架类库 目录 1. 初级工程师使用的api和框架类库ssm 1 2. 中级工程师常使用的api和框架类库 1 3.
  5. Atitit 成果艺术 attilax著 艾提拉著 目录 1. 2 2. 理论类 2 2.1. xxx模型 曲线 定律 原则 曲线 2 3. 代码类成果 范例代码项目 代码类库 与代码片段
  6. Atitit.异常机制的设计原理
  7. Atitit.软件仪表盘(4)--db数据库子系统-监测
  8. 恒生电子:收购Summit中国区业务
  9. 技术揭秘 | 如何设计 RQData 通讯协议
  10. Rust : 高富帅的match