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中被改变得值。
  • 相关阅读:
    GIT的使用
    工具函数:cookie的添加、获取、删除
    技术分布特点:枣核型与网状结构
    js基础知识:表达式
    js基础知识:变量
    解决ie8(及其以下)不支持getElementsByClassName的问题
    毕设进度(10.29)
    毕设进度(10.28)
    毕设进度(10.27)
    毕设进度(10.26)
  • 原文地址:https://www.cnblogs.com/h07061108/p/mysql_procedure_in_out_inout.html
Copyright © 2011-2022 走看看