【MYSQL】-2 存储过程

作者: silent_eyes_77 | 来源:发表于2019-02-12 20:30 被阅读9次

    本文介绍存储过程的内容。

    存储过程是什么?

    存储过程是为了以后的使用而保存的一条或者多条mysql语句的集合。可以将其视为批量文件,用于每次处理多条语句时调用。当然,也不是仅限于批量处理。

    为什么要使用存储过程?

    1)把处理封装在使用单元中,简化复杂操作。
    2)不要求反复建立一系列处理步骤,保证数据完整性,也可以防止错误。
    3)简化对变动的管理,提升安全性。如果表名,列名或者业务逻辑有变化,只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。
    4)提高性能:语句效率更快。

    存储过程的一些特点:

    1)存储过程编写比基本的sql语句复杂。需要更高的技能和经验。
    2)编写权限和执行访问的权限是分开的。

    创建存储过程

    1. 不带参数
    创建语法:
    create procedure productpricing() 
        -> begin 
                     select......from......
        -> end;
    

    分析:存储过程名为
    productpricing,用CREATE PROCEDURE productpricing()语 句定义。如果存储过程接受参数,它们将在()中列举出来。此存储过程没 有参数,但后跟的()仍然需要。BEGIN和END语句用来限定存储过程体,过 程体本身仅是一个简单的SELECT语句.
    例子:返回产品平均价格的存储过程:

    1. 带参数(out)
      执行:
    create procedure productpricing(
        -> out pl decimal(8,2),
        -> out ph decimal(8,2),
        -> out pa decimal(8,2)
        -> )
        -> begin 
                  select min(prod_price) 
                  into pl 
                  from products;
                  select max (prod_price) 
                  into ph 
                  from products;
                  select avg(prod_price) 
                  into pa 
                  from products; 
    end;
    

    此存储过程接受3个参数:pl存储产品最低价格,ph存储产品最高价格,pa存储产品平均价格。
    关键字:out 指出相应参数用来从存储过程传出一个值(返回给调用者)
    in 指出参数传递给存储过程
    inout 对存储过程传入传出
    代码位于 begin 和 end 语句内;这是一系列select 语句,用于检索值,然后保存到相应变量。

    调用:

    call productpricing(@pricelow,@pricehigh,@priceaverage);
    
    这里一个参数对应一个select语句。此过程要求3个参数,因此必须正好传递三个参数。
    
    

    调用过程,并不显示任何数据。返回以后可以显示。

    显示检索出的产品价格:

    select @pricehigh,@pricelow,@priceaverage;
    
    1. 带参数(in & out)
      ordertotal 接受订单号并返回订单合计:
    create procedure ordertotal(
              in onumber int,
              out ototal Decimal(8,2)
    )
    begin
            select sum(item_price*quantity)
            from orderitems
            where order_num=onumber
            into ototal ;
    end;
    

    onumber定义为IN,因为订单号被传入存储过程。ototal定义
    为OUT,因为要从存储过程返回合计。SELECT语句使用这两个 参数,WHERE子句使用onumber选择正确的行,INTO使用ototal存储计算 出来的合计。

    调用这个存储过程:

    call ordertotal (20005,@total);  #参数定义:订单号;变量名
    

    显示合计:

    select @total;
    

    为了得到另一个订单的合计显示,需要再次调用存储过程,然后重 新显示变量:

    call ordertotal (20009,@total);
    select @total;
    

    检查存储过程:

    show create procedure ordertotal;
    

    以上是介绍了什么是存储过程,为什么使用存储过程,存储过程的执行和创建语法。

    相关文章

      网友评论

        本文标题:【MYSQL】-2 存储过程

        本文链接:https://www.haomeiwen.com/subject/qvuxeqtx.html