MySql必知必会实战练习(五)存储过程

1.为什么使用存储过程?(1)通过把处理封装在容易使用的单元中,简化复杂操作(2)为了保证数据的完整性,不要求反复建立一系列的处理操作,所有开发人员和应用程序都使用同一(试验和测试)存储过程

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

1. 为什么使用存储过程?

(1) 通过把处理封装在容易使用的单元中,简化复杂操作

(2) 为了保证数据的完整性,不要求反复建立一系列的处理操作,所有开发人员和应用程序都使用同一(试验和测试)存储过程,则所使用的代码否的相同的,这一点的延申就是为了防止错误,保证数据的一致性

(3)提高性能,因为使用存储过程比使用单独的SQL语句要快

(4)存储功能可以编写功能更强更灵活的代码

  一句话,既简单、安全又高性能

2. 创建存储过程

create procedure product_price()
begin
    select Avg(proc_price) as priceaverage
    from products;
end;

  调用:

  call product_price()

  输出:

  MySql必知必会实战练习(五)存储过程

 是不是很简单,下面使用返回值创建存储过程

drop procedure product_price;
create procedure product_price(
    OUT pa decimal(8,2)
)
begin
    select Avg(proc_price) into pa
    from products;
end;

call product_price(@priceaverge);
select @priceaverge

MySql必知必会实战练习(五)存储过程

  下面是参数和返回值创建存储过程

drop procedure IF EXISTS product_price;
create procedure product_price(
    IN number int,
    OUT sum decimal(8,2)
)
begin
    select Sum(proc_price) into sum
    from products 
    where vend_id = number;
end;

call product_price(1003, @pricesum);
select @pricesum;

MySql必知必会实战练习(五)存储过程

3. 复杂存储过程展示

  使用先前创建的orderitems表

  MySql必知必会实战练习(五)存储过程

  需求:

  通过order_num计算该订单号的产品总价,再根据是否交税情况返回最终价格

create procedure orderprice(
    in ordernum int,
    in istax boolean,
    out sumprice decimal(8,2)
)
begin
    declare taxrate int default 6;
    select Sum(quantity * item_price) into sumprice
    from orderitems
    where order_num = ordernum;
    
    if istax then
        select sumprice+(sumprice*taxrate/100) into sumprice;
    end if;
end;

  测试:

call orderprice(20005,0,@sumprice);
select @sumprice;

MySql必知必会实战练习(五)存储过程

call orderprice(20005,1,@sumprice);
select @sumprice;

MySql必知必会实战练习(五)存储过程

4. 对于使用mysql命令行进程存储操作的补充

  由于mysql命令行使用;作为语句分隔符,如果命令行要解析存储过程的;字符,则它们最终不会成为存储过程的成分,这会使存储过程中的sql出现句法错误。

  可以采用下列方法进行解决:

DELIMITER //
create procedure product_price()
begin
    select Avg(proc_price) as priceaverage
    from products;
end //
DELIMITER ;

  DELIMITER // 告诉命令行实用程序使用//作为新的语句结束分隔符,最后再还原为DELIMITER ;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120051.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • redis安装菜鸟教程_redis集群客户端

    redis安装菜鸟教程_redis集群客户端随笔-848文章-0评论-80阅读-278万转载:windows下安装redis及其客户端-Oops!#-博客园windows下安装redis及其客户端首先下载redis安装包:https://github.com/MSOpenTech/redis/releases解压安装包到相应文件夹,任何盘符都行。文件介绍:redis-server.exe:服务端程序,提供redis服务redis-cli.exe:客户端程序,通过它连接redis服务并…

    2026年1月20日
    3
  • socket端口定义大全「建议收藏」

    socket端口定义大全「建议收藏」
    from:http://www.iana.org/assignments/port-numbers
     
    ////////////////////////////////////////////////////////////////////////////////
     PORTNUMBERS(lastupdated2010-09-24)Theportnumbersaredividedintothreeranges:theWel

    2022年6月16日
    105
  • mysql 索引中的USING BTREE 的意义

    mysql 索引中的USING BTREE 的意义

    2021年11月9日
    358
  • python替换字符串元素_python替换字符串中的子串图文步骤「建议收藏」

    python替换字符串元素_python替换字符串中的子串图文步骤「建议收藏」python替换字符串中的子串图文步骤修改字符串本身是不可能的,因为字符串是不可变类型,只能是通过某些方法来产生它的副本。再把副本赋值给原字符串,达到类似替换的作用。这里介绍几种方法。旧串换新串:使用str.replace(old,new,max)1)字符串调用此函数时,将生成一个字符串的副本。副本中new将替代old。2)old-原来的子串。3)new-新子串,用于替换old。4)max-…

    2022年6月5日
    31
  • C#基础学习之——(一)Dock与Anchor

    C#基础学习之——(一)Dock与Anchor提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、Dock与Anchor是什么?1.Dock2.Anchor二、使用步骤1.设计界面2.使用Anchor与Dock总结前言C#基础学习之——(一)Dock与Anchor最近在对窗体控件进行布局时,发现了Dock与Anchor这两种不同的窗体布局属性,所以查阅了一些资料,在这里进行记录。提示:以下是本篇文章正文内容,下面案例可供参考一、Dock与Anchor是什么?1.Dock①Dock在英文中是停泊的意

    2025年9月4日
    8
  • jar 包与 war 包区别

    jar 包与 war 包区别参考:https://www.jianshu.com/p/3b5c45e8e5bdhttps://www.cnblogs.com/banml/p/11767305.htmlhttps://blog.csdn.net/cjw12581/article/details/107463971文章目录1.jar包jar与zip异同jar包主要用途2.war包war包部署优势开发阶段不适合使用war的原因部署war包到tomcat3.jar包vs.war包SpringB

    2022年5月10日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号