zoukankan      html  css  js  c++  java
  • mysql_存储过程

    存储过程

    存储过程简称过程,procedure,是一种用来处理数据的方式,可以理解为是没有返回值的函数

    创建过程
    create procedure 过程名([参数列表])
    begin
    -- 过程体
    end

    -- 创建过程
    create procedure pro1()
    select * from my_student;

    查看过程:
    函数的查看方式适用于过程,关键字换成procedure,
    show procedure status[like 'partten'];
    -- 查看创建语句
    show create procedure 过程名 ;

    调用过程,没有返回值,select是不能访问的
    使用call调用
    call pro1();

    修改&删除
    只能先删除后新增
    drop procedure 过程名;

    参数:
    函数参数需要数据类型指定,过程比函数更严格,过程有自己的类型限定,三种类型
    in:数据只是从外部传入内部使用(值传递),可以是数据也可以是变量
    out:只允许过程内部使用(不用外部数据),该外部使用的(引用传递,外部的数据会被先清空才会进入内部);只能是变量
    inout:外部的可以再内部使用,而内部修改也可以给外部使用(应用传递),只能是变量

    基本使用:
    create procedure 过程名(in 形参名字 数据类型,out 形参名字 数据类型,inout 形参名字 数据类型)
    过程参数:
    delimiter $$
    create procedure pro1(in int_1 int,out int_2 int, inout int_3 int)
    begin
    -- 查看三个变量
    select int_1,int_2,int_3;-- int_2的值一定会是null
    -- 修改局部变量
    set int_1 = 10;
    set int_2 = 100;
    set int_3 = 1000;
    -- 查看局部变量
    select int_1,int_2,int_3;
    -- 查看全局变量
    select @int_1,@int_2,@int_3;
    -- 修改全部变量
    set @int_1 = 'a';
    set @int_2 = 'b';
    set @int_3 = 'c';
    select @int_1,@int_2,@int_3;
    end
    $$
    delimiter ;

    调用:out和inout类型必须是变量,而不是数值

    正确调用
    set @int_1=1;
    set @int_2=2;
    set @int_3=3;
    call pro1(@int_1,@int_2,@int_3);
    内部修改会影响外部

    存储过程对于变量的操作是滞后的,是在存储过程调用结束的时候,才会重新将内部修改的值赋值给外部传入的变量。

    局部变量与全局变量无关,在存储过程调用结束之后,系统会将局部变量重新返回给全局变量(out,inout)

  • 相关阅读:
    无缝衔接 gRPC 与 dubbo-go
    阿里员工一天有26小时,怎么做到的?
    小米流式平台架构演进与实践
    基于 Flink 构建 CEP 引擎的挑战和实践
    实时计算在贝壳的实践
    阿里巴巴大规模应用Flink的踩坑经验:如何大幅降低 HDFS 压力?
    我要上官网,上云案例征集活动启动啦! 提交案例,得大奖!【阿里云】
    【原】git常用命令笔记
    【原】使用vue2+vue-router+vuex写一个cnode的脚手架
    【原】老生常谈-从输入url到页面展示到底发生了什么
  • 原文地址:https://www.cnblogs.com/qull/p/6597441.html
Copyright © 2011-2022 走看看