【MySQL】(基础篇十七) —— 存储过程

news2024/9/21 2:35:33

存储过程

本文将介绍什么是存储过程,为什么要使用存储过程以及如何使用存储过程,并且介绍创建和使用存储过程的基本语法。

MySQL的存储过程是预编译的SQL语句集合,它们作为一个可执行单元存储在数据库中。存储过程能够封装复杂的业务逻辑,接受输入参数,输出结果集,甚至返回值,从而提供了一种高效且模块化的方法来执行常见的或复杂的数据库操作。

创建存储过程的基本语法如下:

CREATE PROCEDURE procedure_name (IN|OUT|INOUT param1 datatype, ...)
BEGIN
   -- SQL语句集合
   ...
END;
  • CREATE PROCEDURE 是用来创建存储过程的关键字。
  • procedure_name 是存储过程的名称。
  • (IN|OUT|INOUT param1 datatype, …)参数列表,其中:
    • IN 参数表示传入值到存储过程中。
    • OUT 参数表示从存储过程中传出值。
    • INOUT 参数既可传入也可传出。
    • param1 datatype 定义参数名及其数据类型。
  • BEGIN...END; 包含了存储过程中的SQL语句。

检查存储过程使用SHOW CREATEP ROCEDURE语句

【示例】创建一个存储过程,用于计算员工的平均工资

CREATE PROCEDURE `avg_salary`()
BEGIN
  SELECT AVG(salary) as avgsalary
  FROM employees;
 END

和视图一样,存储过程在被创建之后也会被保存到本地,可以随时查看其sql语句

在这里插入图片描述

执行存储过程

调用存储过程使用 CALL 语句,因为存储过程实际上是一种函数,所以存储过程名后需要有()符号(即使不传递参数也需要

【示例】执行上面例子中创建的存储过程

CALL avg_salary();

运行结果:

在这里插入图片描述

删除存储过程

删除存储过程语法如下:

DROP PROCEDURE 存储过程名

使用参数

变量(variable)内存中一个特定的位置,用来临时存储数据。

【示例】创建一个带参数的存储过程employeesalary,实现计算员工工资的最高值、最低值和平均值

CREATE PROCEDURE employeesalary(
  OUT sl DECIMAL(8,2),
  OUT sh DECIMAL(8,2),
  OUT sa DECIMAL(8,2)
)
BEGIN
  SELECT MIN(salary)
  INTO sl
  FROM employees;
  SELECT MAX(salary)
  INTO sh
  FROM employees;
  SELECT AVG(salary)
  INTO sa
  FROM employees;
END;

调用存储过程,为几个数据创建对应的变量

CALL employeesalary(
  @lowsalary,
  @highsalary,
  @avgsalay
);

查询变量中存储的数据:

SELECT @lowsalary

运行结果:

在这里插入图片描述

【示例】同时使用IN和OUT参数创建存储过程,查询不同manager管理的用户的数量

CREATE PROCEDURE managertotal(
  IN manager INT,
  OUT totalpeople INT
)
BEGIN
  SELECT COUNT(manager_id)
  FROM employees
  WHERE manager_id = manager;
END

调用存储过程:

CALL managertotal('100', @total);

运行结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1870231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享一款永久免费内网穿透工具——巴比达内网穿透

最近在做web项目,想办法将web项目映射到公网进行访问,由于没有固定IP,只能使用内网穿透的方法,于是在网上搜索了一番,只有神卓互联旗下的这款巴比达内网穿透是真正免费的, 其它的要么用不了、要么限制没有流…

文件进行周期性备份后权限更改的解决方案--使用脚本和定时任务

这里写目录标题 背景现象解决方案原因分析面临的问题解决思路操作步骤每个文件夹权限分配表测试chmod和chown两个命令是否可行写脚本实现定时同步同时修改权限 异地同步改权限在NAS上生成SSH密钥对将NAS的公钥复制到Linux服务器在NAS上编写同步脚本在NAS上执行脚本,…

记录一次OPDS trunc()函数使用错误

说明:本文介绍 场景 在一次SQL查询时,需要对结果值保留两位小数,不四舍五入,直接截取到小数点后两位。如 59.156到59.15,23.2134到23.21,查看官方帮助文档(https://help.aliyun.com/zh/maxcom…

【分享】30秒在线自助制作电子证件照

近期由于自己需要制作电子证件照,所以在网上找在线制作电子证件照的网站,找了很多网站都是收费的,也下载了很多app制作,都是要收费的。最后,所以索性自己开发一个网站制作电子证件照。这里分享给需要的朋友。&#xff…

探索Android架构设计

Android 应用架构设计探索:MVC、MVP、MVVM和组件化 MVC、MVP和MVVM是常见的三种架构设计模式,当前MVP和MVVM的使用相对比较广泛,当然MVC也并没有过时之说。而所谓的组件化就是指将应用根据业务需求划分成各个模块来进行开发,每个…

14、电科院FTU检测标准学习笔记-录波功能2

作者简介: 本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验 在配电自动化验收测试以及电科院测试中,本人全程参与,积累了不少现场的经验 ———————————————————…

力扣:203. 移除链表元素(Java)

目录 题目描述:示例 1:示例 2:代码实现: 题目描述: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入…

C++学习笔记---POCO库

在Windows系统中安装POCO 1)安装OpenSSL POCO编译安装依赖OpenSSL,如果未安装OpenSSL则应该先安装OpenSSL。 假设将OpenSSL安装在C:\OpenSSL-Win64,将C:\OpenSSL-Win64、C:\OpenSSL-Win64\lib添加到PATH环境变量中2)安装POCO 将p…

这不是危言耸听!时序Transformer颠覆传统,历史级突破!

【时间序列Transformer】在近年来的深度学习领域中备受关注,它通过将Transformer架构应用于时间序列数据,显著提升了模型在长时间依赖建模和复杂模式识别任务中的表现。时间序列Transformer技术已经在金融预测、气象预报和健康监测等多个领域取得了显著成…

PNAS|这样也可以?拿别人数据发自己Paper?速围观!

还在为数据量小,说服力不足发愁? 想研究脱颖而出、眼前一亮? 想从更高层次的探索微生物的奥秘,发出一篇好文章? 近期,有一篇发表在PNAS(IF11.1)的文章“Deforestation impacts soil biodiversity and ecos…

Swift 周报 第五十六期

文章目录 前言新闻和社区苹果与消费者修改 3500 万美元 iPhone 音响和解协议苹果(AAPL.US)因监管担忧今年不会在欧盟推出 AI 功能苹果暂停高端 Vision 头戴设备研发 计划推出更廉价版 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组自主整理周报的第五十六期&am…

小红书2024LLM论文分享

2024小红书大模型论文分享 BatchEval基于LLM评估LLM生成文本的质量 ACL2024 https://ypw0102.github.io/ 如果文本评价需要多个维度,需要调整BatchEval么? 目前是完整流程走一遍的,因此没有具体考虑细粒度。 评测连续的数据域,S…

JavaScript中的Date对象,以及常用格式化日期的方法封装

一、Date对象 二、操作Date对象 1、创建Date对象 (1)常用方法 (2)使用示例 2、获取日期 (1)常用方法 (2)使用示例 3、设置日期 (1)常用方法 &…

youlai-boot项目的学习(3) 本地redis、MinIO的安装与配置

youlai-boot项目除了使用mysql数据库、还有redis,以及OSS服务,OSS除了云OSS服务,还有自部署的MinIO服务。 前面我们已经安装好了mysql数据库,那么我们来看看本地redis、MinIO服务怎么部署 环境 mac OS, iterm2&#…

中霖教育怎么样?注册会计师考试难吗?

中霖教育:注册会计师(CPA)考试的难度高吗? 对于不同背景的考生来说,注册会计师考试的挑战程度不同。那些有良好基础和充裕准备时间的考生,通过考试的可能性要超过那些从零开始且准备时间有限的人。 据最近…

YOLO目标检测综述(2024.6月最新!)

1 基本概念 目标检测(Object Detection)是计算机视觉领域的重要任务之一,旨在识别图像或视频中的特定目标并将其位置标记出来。与图像分类任务不同,目标检测要求不仅能够识别目标类别,还需要精确地定位目标的位置。由于…

1.2章节input输入函数语法使用和示例

在Python中,input() 函数用于从用户获取输入。这个函数会等待用户输入一行文本,然后按回车键,最后将输入的文本作为字符串返回。 一、基本语法 当你运行上面的代码时,它会打印出 "请输入一些文字: ",然后等…

.idea文件夹里面iml文件有啥用

.idea文件夹和其中的.iml文件对于IntelliJ IDEA项目非常重要,它们共同构成了IDEA对项目理解的基础。让我们详细了解一下这两者的作用: .idea文件夹 .idea文件夹包含了IntelliJ IDEA项目的所有配置信息,包括但不限于: 编译器设置…

jmeter之接口数据与数据库数据检验!

前言 本文讲解使用jmeter测试接口,然后与数据库里面的数据进行校验对比。本节使用一个新增数据的接口,新增一条数据,然后在数据库里面进行查询,是否能够查询到此条数据。 一、接口环境搭建 1.1 新建一个http请求,写…

3d合并模型一直加载有哪些原因---模大狮模型网

当在3D软件中合并3d模型时,可能会遇到加载时间过长或持续加载的情况。这可能是由以下原因之一引起的: 一:模型复杂度 合并的模型可能非常复杂,包含大量的面片、顶点或纹理等。这会增加加载和处理的时间。解决方法是优化模型&…