存储过程
简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批件,
虽然它们的作用不仅限于批处理。
存储过程就是有业务逻辑和流程的集合, 可以在存储过程中创建表,更新数据, 删除等等。
为什么要使用存储过程
1.通过把处理封装,在容易使用的单元中,简化复杂的操作(正如前面例子所述)。
2.由于不要求反复建立一系列处理步骤,这保证了数据的完整性。如果所有开发人员和应用程序都使用同一(试验和测试)存储过程,则所使用的代码都是相同的。这一点的延伸就是防止错误。 需要执行的步骤越多,出错的可能性就越大。防止错误保证了数据的一致性。
3.简化对变动的管理。如果表名、列名或业务逻辑(或别的内容)有变化,只需要更改存储过程的
代码。使用它的人员甚至不需要知道这些变化。
-------------------
一个简单的存储过程
create produce produceName()
begin
select name from user;
end;
调用存储过程:
call produceName();
删除存储过程:
drop produce if exists produceName;
-----------------------
使用参数的存储过程:
create produce produceName(
out min decimal(8,2),
out avg decimal(8,2),
out max decimal(8,2)
)
begin
select MIN(price) into min from order;
select AVG(price) into avg from order;
select MAX(price) into max from order;
END;
MySQL支持IN(传递给存储过程)、OUT(从存储过程传出,如这里所用)和INOUT(对存储过程传入和传出)类型的参数。
存储过程的代码位于BEGIN和END语句内,如前所见,它们是一系列SELECT语句,用来检索值,然后保存到相应的变量(通过指定INTO关键字)调用此修改过的存储过程,必须指定3个变量名:call produceName(@min,@avg,@max);然后即可调用显示该变量的值:
select @min,@avg,@max;
--------------------------------
使用in参数, 输入一个用户id, 返回该用户所有订单的总价格
create procedure getTotalById (
in userId int,
out total decimal(8,2)
)
BEGIN
- select SUM(r.price) from order r
- where r.u_id = userId
into total;
END;
调用存储过程
call getTotalById(1,@total);
select @total;
---------------------------------------------
复杂一点的过程, 根据用户id获取该用户的所有订单价格, 并动态的选择是否加税。代码设计如下
create procedure getTotalByUser2(
in userId int,
in falg boolean, --是否加税标记
out total decimal(8,2)
)
begin
DECLARE tmptotal DECIMAL(8,2);
DECLARE taxrate int DEFAULT 6;--?默认的加税的利率
select SUM(r.price) from order r
where r.u_id = userId
into tmptotal;
if falg then
select tmptotal + (tmptotal/1000*taxrate) into mptotal;
end if;
select tmptotal into total;
END;
该过程传入三个参数, 用户id, 是否加税以及返回的总价格,在过程内部, 定义两个局部变量tmptotal和taxrate,把查询出来的结果赋给临时变量, 在判断是否加税。最后把局部变量的值赋给输出参数。
call getTotalByUser2(1, false, @total); -- 不加税
call getTotalByUser2(1, true, @total); --加税
select @total;
相关推荐
在深入探讨如何使用Java通过JDBC执行存储过程之前,我们首先需要理解几个核心概念:JDBC(Java Database Connectivity)、存储过程以及它们在Java中的交互方式。 ### JDBC:Java与数据库的桥梁 JDBC是一种用于执行...
描述部分简述了此存储过程的特点:“Oracle通用数据库存储过程代码——高效分页存储过程,只需简单的修改即可使用,方便易懂!”这说明该存储过程设计简单、易于理解,并且用户可以根据实际需求进行少量的定制化修改...
### DB2 Java 存储过程相关知识点 #### 标题:DB2 Java 存储过程 **DB2 Java 存储过程** 主要探讨的是如何在 IBM DB2 数据库环境中利用 Java 编写存储过程。这涉及到 DB2 的一系列产品和服务,特别是与 Java 集成...
【触发器、存储过程和函数的区别】 触发器、存储过程和函数都是数据库管理系统中的重要组件,它们各自在特定场景下发挥着不同的作用。 1. **触发器(Triggers)** - 触发器是一种特殊的存储过程,它会在特定的...
### 数据库设计过程详解 #### 一、数据库与信息系统的关系 数据库是信息系统的核心与基础,它不仅负责存储和管理大量的数据,还提供了高效的数据检索功能,确保信息系统能够快速准确地获取所需信息。数据库的设计...
Hadoop是一种能够处理大量数据的大规模分布式存储与计算框架,常用于构建大数据分析平台。本文档基于一位用户的实践经历,详细介绍了如何在虚拟机环境下安装和配置Hadoop的过程。该文档不仅适用于初学者了解Hadoop的...
在SQL Server中,存储过程是预编译的SQL语句集合,它们允许开发人员封装复杂的逻辑,提高数据库操作的效率和安全性。以下是SQL Server中一些常见的存储过程及其用途: 1. **分页查询**: 分页查询是数据库中常见的...
完成逻辑地址转换成相应的物理地址的过程。 1、建立一张位示图,用来模拟内存的分配情况,利用随机数产生一组0和1的数对应内存的使用情况。 2、输入块(页)的大小,通过模拟位示图为本作业分配内存空间建立相应的...
6. **XML(eXtensible Markup Language)**:XML是一种用于标记数据的语言,常用于跨平台的数据交换和存储,尤其是在Web服务和企业应用集成中。 【Struts2优点】 Struts2是一个基于MVC设计模式的Java Web框架。它的...
**AES加密解密详解** AES(Advanced Encryption Standard),即高级加密标准,是美国国家标准与技术研究...AES因其高效性和安全性,已经成为现代加密技术的基石,广泛应用在网络通信、数据存储和软件保护等多个领域。
钻前准备涉及到钻机的搬运与安装,以及井口设施的准备,例如设置大鼠洞和小鼠洞,以储存和方便处理钻柱。钻井阶段,使用清水或钻井液进行钻进,通过起下钻、接单根和钻进等操作来逐步深入地层。钻井辅助作业包括电测...
数据库设计是创建高效、可靠和易于管理的数据存储系统的关键步骤。整个过程分为五个主要阶段,确保数据库能够满足用户的业务需求并适应未来的变化。 首先,**需求分析**是数据库设计的起点。这一阶段需要深入理解...
7. **设备驱动**:移植过程中还需要为目标平台编写或适配设备驱动程序,如串口、网络、存储等,使UCOS-II能够访问和控制硬件资源。 8. **编译工具链**:使用对应的编译器和链接器,如GCC或IAR,针对目标平台进行...
1. **配置管理**: 通过XML文件存储项目元数据,如需求、设计文档、代码版本等,便于团队成员共享和管理。 2. **过程定制**: RUP可以通过XML来定义和定制特定项目的过程,使得团队可以根据自身需求调整开发流程。 3...
在核酸疫苗的构建过程中,关键步骤包括选取编码病原体抗原的基因,将其插入到一个能够被宿主细胞读取和表达的载体中。载体通常为质粒DNA,包含启动子、增强子以及3'端多聚A序列,确保基因在宿主细胞内的有效表达。...
在Linux操作系统中,LVM(Logical Volume Manager,逻辑卷管理器)是一种强大的磁盘管理工具,它允许我们创建、扩展和调整磁盘分区的大小,以满足不同存储需求。然而,有时我们需要删除LVM结构,这可能是因为系统...
9. **CMOS设置**:CMOS存储了BIOS的配置信息,包括硬件设置和用户自定义的启动顺序等,断电后数据仍能保持。 10. **引导加载程序**:完成上述步骤后,系统BIOS将寻找引导设备(如硬盘上的MBR,Master Boot Record)...
1. 吸气阶段:当鸟类吸气时,空气通过中支气管进入后气囊,这些气囊主要起到储存空气的作用。另一部分空气则继续通过次级支气管和三级支气管,到达微支气管,在这里进行第一次气体交换,氧气进入血液,二氧化碳排出...