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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • nginx 接口转发_nginx后端接口转发到内网

    nginx 接口转发_nginx后端接口转发到内网目前开发多数趋于前后端分离,后端开发人员有的时候懒得搭建前端环境,可是写后端又不便于联调,经常被这个困扰中,本文介绍如何用nginx转发。前提:有一套完整的环境,可以访问整个环境。环境地址,eghttp://wangzhi.com背景:开发人员不想搭建前端环境,可是又不便于联调。postman联调的话,参数拼接比较麻烦。步骤:1、本地项目启动,eg:localhost:80802、配置本地host127.0.0.1wangzhi.com说明:需要把环境地址,转到本地,

    2022年10月9日
    0
  • linux下mysql开启远程访问权限及防火墙开放3306端口

    linux下mysql开启远程访问权限及防火墙开放3306端口

    2021年10月19日
    41
  • QT基本介绍

    QT基本介绍一、什么是QT?Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。二、发展历史1991年Qt最早由奇趣科技开发1996年进入商业领域,它也是目前流行的Linux桌面环境…

    2022年5月13日
    106
  • ToF相机从Camera2 API中获取DEPTH16格式深度图[通俗易懂]

    ToF相机从Camera2 API中获取DEPTH16格式深度图[通俗易懂]ToF相机工作原理:ToF相机给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉冲往回的飞行时间来得到目标距离。ToF相机可以同时得到整幅图像的深度(距离)信息。  深度图通常是灰度图,其中的每个值代表光反射表面和相机的距离。灰度图水平垂直坐标对应像素点位置,该位置的灰度值对应的是该像素距离摄像头的距离。所以深度图中的每个像素可以表示空间中一个点的三维坐标。如果光源被吸收或者未收到反射信号则呈现黑色。从Camera2API中获取DEPTH16格式的深度信息ImageFormat.DE

    2022年5月10日
    58
  • scrapy环境配置_python的安装环境

    scrapy环境配置_python的安装环境本文仅供学习交流使用,如侵立删!联系方式及demo下载见文末PythonScrapy安装及相关配置环境win10Python:3.6.7Scrapy:2.4.1Python安装Scrapy安装pipinstallscrapy解决Command“pythonsetup.pyegg_info”failedwitherrorcode1问题更新pippipinstall–upgradepip问题:权限不足解决:pip

    2022年9月18日
    0
  • socket网络编程——UDP编程流程「建议收藏」

    socket网络编程——UDP编程流程「建议收藏」UDP提供的是无连接、不可靠的、数据报服务。编程流程如下:socket()方法用来创建套接字,使用udp协议时,选择数据报服务SOCK_DGRAM。sendto()方法用来发送数据,由于UDP是无连接的,每次发送数据都需要指定对端的地址(IP和端口)。recvfrom()方法接收数据,每次都需要传给该方法一个地址结构来存放发送端的地址。recvfrom()方法可以接收所有客户端发送给当前应用程序的数据,并不是只能接收某一个客户端的数据。UDP服务端代码:#include<stdi

    2022年9月3日
    4

发表回复

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

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