存储过程

大概定义:用一个别名来描述多个sql语句的执行过程。

  • 最简单
    delimiter //
    create PROCEDURE p1()
    begin
    select * from userinfo;
    end //
    delimiter ; call p1();
  • 传参(in, out, inout)
    • in 表示传入的参数, 可以传入数值或者变量,即使传入变量,并不会更改变量的值,可以内部更改,仅仅作用在函数范围内。

      delimiter //
      create procedure p2(
      in v1 int
      )
      begin
      set v1 = 2 * v1;
      select v1;
      end // delimiter ; call p2(19); ----------------
      delimiter //
      create procedure p6(
      in v int
      )
      begin
      set v = 10;
      select v;
      end //
      delimiter ; call p6(10); set @v4 = 0;
      call p6(@v4);
      select @v4; -- 此时@v4依然为0
    • out 表示存储执行存储过程的返回结果,且参数只能是一个变量,且只能对其赋值(函数执行完以后也生效),不能在函数内获取其值。

      delimiter //
      create procedure p3(
      out v int
      )
      begin
      set v = 10;
      end //
      delimiter ; set @v1 = 0; # @varible_name 类似于定义一个局部变量,跟session一样
      call p3(@v1);
      select @v1; -----------------------------
      delimiter //
      create procedure p4(
      out v int
      )
      begin
      set v = v + 5; -- 这儿有问题,不能这样,只能直接赋值
      select v;
      end //
      delimiter ;
      -- 这段代码是有问题的。
      delimiter //
      create procedure p5(
      out v int
      )
      begin
      set v = 5; -- 对的
      select v;
      end //
      delimiter ; set @v3 = 0;
      call p5(@v3);
    • inout 表示从外部传入的参数经过修改后可以返回的变量,既可以使用传入变量的值也可以修改变量的值(即使函数执行完)。

      delimiter //
      create procedure p7(
      inout v int
      )
      begin
      set v = 9999;
      select v;
      end //
      delimiter ; call p7(10); set @v5 = 0;
      call p7(@v5);
      select @v5; ------------------------------------ delimiter //
      create procedure p8(
      inout v int
      )
      begin
      set v = v + 9999;
      select v;
      end //
      delimiter ; set @v6 = 1;
      call p8(@v6);
      select @v6;

综上

  • in只可以读取值/变量,不能更改
  • out不能读,可以更改
  • inout既可以读又可以更改

超详细讲解mysql存储过程中的in/out/inout的更多相关文章

  1. MYSQL存储过程中常使用的命令记录

    MYSQL存储过程中常使用的命令记录 1.触发器trigger 查看:show triggers; 2.存储过程procedure 查看:show procedure status; 查看详细:sho ...

  2. MySQL存储过程中的3种循环,存储过程的基本语法,ORACLE与MYSQL的存储过程/函数的使用区别,退出存储过程方法

    在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体 ...

  3. MYSQL存储过程中的IN、OUT和INOUT

    MYSQL存储过程中的IN.OUT和INOUT,不能简单理解为一个方法的参数和返回值,而是面向整个过程上下文变量的. 一.MySQL 存储过程参数(in) 基本可以理解为传入function的参数,而 ...

  4. Mysql 存储过程中使用多游标

    Mysql 存储过程中使用多游标 drop procedure IF EXISTS test_proc_1; create procedure test_proc_1() begin ; ) ; ) ...

  5. MySQL存储过程中使用SELECT …INTO语句为变量赋值

    使用SELECT …INTO语句为变量赋值 在MySQL存储过程中,可以使用SELECT …INTO语句对变量进行赋值,该语句在数据库中进行查询,并将得到的结果赋值给变量.SELECT …INTO语句 ...

  6. 【转】MySQL存储过程中使用动态行转列

    MySQL存储过程中使用动态行转列 最近做项目关于数据报表处理,然而数据库存储格式和报表展现形式不同,需要进行一下行转列的操作,在做上一个项目的时候也看了一下,但是后来换了读取方式,也就没深入研究这个 ...

  7. mysql -- 存储过程中 declare 和 set 定义变量的区别

    mysql存储过程中,定义变量有两种方式:1.使用set或select直接赋值,变量名以 @ 开头.例如:set @var=1;可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量. 2.以 ...

  8. mysql存储过程中 乱码问题解决办法

    中文乱码无论在何时都是一个头疼的问题,mysql的存储过程参数也同样存在这个问题.1.直接使用insert into语句没问题,能够正常插入汉字.2.把insert into语句移到Procedure ...

  9. mysql 存储过程中limit

    1.mysql的高版本(5.5),存储过程中的limit可以使用变量,如下:select * from student limit iStart,iNum; 2.mysql的低版本(5.1),存储过程 ...

随机推荐

  1. Java实现FTP跨服务器文件操作

    在过去的几年工作中,曾经多次需要把文件上传到单独的服务器,而程序是在单独的服务器上部署的,在进行文件操作的时候就需要跨服务器进行操作包括:文件上传.文件下载.文件删除等.跨服务器文件操作一般是需要FT ...

  2. Git项目管理出现 .gitignore文件不起作用的解决

    在git管理项目的代码过程中总会有需要忽略的目录或者文件,比如编译过程中产生的目录和文件,这时候就需要 .gitignore来进行目录或文件的忽略了. 如果没有 .gitignore文件,可以自己手工 ...

  3. python_端口扫描

    client.py import socket def get_ip_status(ip, port): sk= socket.socket(socket.AF_INET, socket.SOCK_S ...

  4. Serilog 源码解析——数据的保存(上)

    在上一篇中,我们主要研究了Serilog是如何解析字符串模板的,它只是单独对字符串模板的处理,对于日志记录时所附带的数据没有做任何的操作.在本篇中,我们着重研究日志数据的存储方式.(系列目录) 本篇所 ...

  5. redis-server文件启动cmd一闪而过

    工作上需要在本地装redis,所以就帮别人排查了一个问题,就是redis服务双击了之后不能起来,就是一个黑色的cmd框一闪而过,正常的是这样的: 然而,我当时第一次接触windows上的redis服务 ...

  6. ceph unfound objects 处理

    ceph Vol 45 Issue 1 1.unfound objects blocking cluster, need help! Hi, I have a production cluster o ...

  7. nginx配置代理缓存

    nginx可以实现反向代理的配置,并且可以使用缓存来加速,本文是简单的实现功能的配置,暂时没有做其他的优化的部分的配置,从网上的资料来看,很多配置都是没有讲哪些是必须配置的,我自己在配置过程中就发现没 ...

  8. SSTI Flask

    1.什么是SSTI?什么是Flask? ​ SSTI称为服务端模板注入,主要为Python.Java.PHP的框架在使用渲染函数时,由于代码不规范或者对于用户输入过于信任而导致产生了SSTI.类似于S ...

  9. 总结MathType中输入小于号的方法

    作为一款专业的公式编辑软件,MathType可谓是非常强大,先不说其编辑公式是多么的方便.迅速,但就打开软件界面,看到不可估算的数学符号有那么多,你就会感叹它的强大,竟然能把绝大部分的数学符号都汇聚于 ...

  10. 循序渐进VUE+Element 前端应用开发(29)--- 高级查询条件的界面设计

    在系统模块中的业务列表展示里面,一般我们都会在列表中放置一些查询条件,如果是表字段不多,大多数情况下,放置的条件有十个八个就可以了,如果是字段很多,而这些条件信息也很关键的时候,就可能放置很多条件,但 ...