mysql存储过程和函数

需求背景:

  显示程序有时候出现问题导致数据错误的时候,如果比较紧急,我们可以写一个存储来快速修复这块的数据,然后再去修改程序

  存储过程相对于java程序开发来说,不是很方便阅读和维护,所以不建议在程序中去调用存储过程来做一些业务操作

  当mysql内部的函数无法满足我们的需求时,我们可以自定义函数来满足

本文内容:

  详解存储过程的使用、详解自定以函数的使用

准备数据:

  create table you_l(

    id int not null primary key comment '编号',

    age smallint unsigned not null comment '年龄',

    name varchar(16) not null comment '姓名'

  )comment '用户表';

存储过程:

概念:

  一组预编译好的sql语句集合,理解为成批处理语句。

  好处:

    提高代码重用性、简化操作、减少编译次数并且减少和数据库服务器连接的次数,提高了效率

创建存储过程:
    create procedure 存储过程名([参数模式] 参数名 参数类型)
    begin
        存储过程体
    end

 参数模式有3种:
    in:该参数可以作为输入,也就是该参数需要调用者传入值
    out:该参数可以作为输出,也就是说该参数可以作为返回值
    inout:该参数即可以作为输入也可以作为输出
    参数模式默认为 in
    一个存储过程可以有多个输入,多个输出、多个输入输出参数
 

删除存储过程:

  drop procedure if exists 存储过程名

调用存储过程:

  call 存储过程名

查看存储过程:

  show create procedure 存储过程名称

修改存储过程:

  只能删除已经存在,再创建一个新的


 创建一个不带参的存储过程:

         ->delimiter ;        //重新设置结束符为  ;

    ->call yu_name();      //调用存储过程

创建一个带参的存储过程:

 创建一个带out参数的存储过程:

创建带inout的存储过程:

函数:

  概念:

    一组预编译好的sql语句集合,理解成批量处理语句。和java方法相似,但是必须又返回值。

  创建函数:(参数是可选的,返回值是必须的)

    create function 方法名(参数名 参数类型)

      returns 返回值类型

      begin

        函数体

      end 

       调用函数:

    select 方法名;

  删除函数:

    drop function if exists 方法名 

  查看函数详细:

    show create function 函数名

  实例:

  实例1:创建无参函数

    ->delimiter $

    ->create function ee()

    ->  returns int

    ->  begin

    ->    declare max_id int default 0;

    ->    select max(id) into max_id from yu_l;

    ->    return max_id;

    ->  end $

    ->delimiter ;

    ->select ee();

    实例2:创建有参函数

    ->delimiter $

    ->create function cc(v_name varchar(16))

    ->  returns int

    ->  begin

    ->    declare r_id int;

    ->    select id into r_id from yu_l where name=v_name;

    ->    return r_id;

    ->  end $

    ->delimiter ;

    -> select cc(name) from yu_l;

原文地址:https://www.cnblogs.com/fbbg/p/13538390.html