zoukankan      html  css  js  c++  java
  • MySQL数据库之存储过程

       

         存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批件,虽然它们的作用不仅限于批处理。在我看来, 存储过程就是有业务逻辑和流程的集合, 可以在存储过程中创建表,更新数据, 删除等等。

    一个简单的存储过程: 

    1. create procedure porcedureName () 
    2. begin 
    3.     select name from user; 
    4. end;  

    存储过程用create procedure 创建, 业务逻辑和sql写在begin和end之间。mysql中可用call porcedureName ();来调用过程。

    删除存储过程

         DROP PROCEDURE IF EXISTS porcedureName; -- 没有括号() 

    在这里,我们还要了解三个特别的字段in,out以及inout的区别:

    1.参数in的使用(代表输入,意思说你的参数要传到存过过程的过程里面去)

    /**
    案例功能:求1-n的和
    */
    delimiter $
    create procedure p1(in n int)
    begin
    declare total int default 0;
    declare num int default 0;
    while num < n do
    set num:=num+1;
    set total:=total+num;
    end while;
    select total;
    end$
    call p1(10)$

    2.参数out的使用(代表往外输出)
    //这里还要注意一点的就是我们的输出参数一定要设置相应类型的初始,否则不管你怎么计算得出的结果都为NULL值
    /**
    案例功能:求1-n的和
    */
    create procedure p2(in n int,out total int)
    begin
    declare num int default 0;
    set total:=0;
    while num < n do
    set num:=num+1;
    set total:=total+num;
    end while;
    end$

    这里我们需要对第二个参数定义一个变量名(更形象点就是你输入一个输入类型的参数n,由输出参数total往外发射输出我们只需要定义一个变量名来接收这个输出值即可)
    call p2(100,@sum)$   //这里的@sum就是我定义用来接收处处total的值
    select @sum$
     
     
     
    总结in、out区别:
    in:表示输入一个值,你需要一个值,我给你一个值
    out:你往外输出一个值,你输出的那个值我就拿一个变量来接收你给我输出的那个值
     
    3.参数inout的使用(既能输入一个值又能传出来一个值)

    /**
    功能:传一个年龄,自动让年龄增长10岁
    */
    create procedure p3(inout age int)
    begin
    set age:=age+10;
    end$

    注意:调用的时候,我这里需要和大家声明一下,inout型的参数值既是输入类型又是输出类型,你给它一个值,值不是变量,不是变量那out的时候它怎么赋给这个值是不是?

    因此我们需要先设置一个变量并初始化这个值,调用的时候直接传这个变量即可。

    set @currentAge=8$
    call p3(@currentAge)$
    select @currentAge$

    ————————————————
    版权声明:本文为CSDN博主「yuefeicall」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/yuefeicall/article/details/78803287

  • 相关阅读:
    第十四回 基础才是重中之重~委托实例的几种定义方式(规规矩矩method,逻辑简单delegate,层次清晰lambda)
    第十五回 基础才是重中之重~老赵写的CodeTimer是代码性能测试的利器
    第十一回 基础才是重中之重~Conditional特性使代码根据条件在debug或者release模式中执行
    第十二回 基础才是重中之重~.net中的显式事务与隐式事务
    IE绝对定位元素神秘消失或被遮挡的解决方法
    图片按钮样式隐藏文字的
    javascript 保留小数
    Javascript兼容性问题小结(容易导致浏览器不同,又不容易察觉的)
    SQL 随机选取10条数据
    动态添加类和元素样式属性(style and className)
  • 原文地址:https://www.cnblogs.com/kuaileya/p/11897619.html
Copyright © 2011-2022 走看看