zoukankan      html  css  js  c++  java
  • MYSQL存储过程中的IN、OUT和INOUT

      MYSQL存储过程中的IN、OUT和INOUT,不能简单理解为一个方法的参数和返回值,而是面向整个过程上下文变量的。

    一、MySQL 存储过程参数(in) 
    基本可以理解为传入function的参数,而如果该参数是个变量,那么整个procedure过程结束后,不会影响外部的变量值。
    
    可以直接这样:
    
    call abc(’a');   这种情况直接给in类型的参数赋值。
    
    针对上下文的情况:
    
    set @a=’aa’;   给一个变量赋值
    
    call abc(@a);   这里@a作为一个in类型的参数传给abc
    
    不管这个procedure内部把这个参数赋予了什么值,之后再 selece @a; @a的值都还是’aa’。
     二、MySQL 存储过程参数(out)
    可以理解为某个function要改变的外部变量,不管这个变量在外部是什么值,在内部的初始值都是null,而内部对它的影响将改变这个外部变量值。
    
    直接给一个procedure传一个out参数是没有意义的,因为out值在procedure默认都会被初始为null。
    
    针对上下文情况:
    
    set @b=’aa’;
    
    call abc(@b);   @b作为一个out类型的变量传进去,在这个procedure中对@b所对应的变量进行了操作,赋值了’cc’。
    
    之后 select @b;    @b是’cc’。
    
    而且,@b的初始值对这个procedure是无效的,在procedure中@所对应的变量默认值为null
    三、MySQL 存储过程参数(inout)
    可以理解为一个function在内部声明了global ,并可能对该变量值进行修改。
    
    针对上下文情况:
    
    set @b  =’aa’;
    
    call abc(@b);   在这个procedure中对b所对应的变量进行了操作,@所对应的procedure变量的初始值就是@b的值。
    
    之后 select @b;  这时候,@b得值就是在procedure中被改变得值。
  • 相关阅读:
    JDK有关环境变量的配置
    installation Manager的那回事
    WMB ESQL报文函数截取新的XML方法
    mb常用操作指令
    DB2报错SQLSTATE=57017 code page "1392"
    DB2操作命令
    MQ7.1及高版本的新特性
    Java项目打jar包及外部运行
    loadrunner
    Ireport5那些事
  • 原文地址:https://www.cnblogs.com/h07061108/p/mysql_procedure_in_out_inout.html
Copyright © 2011-2022 走看看