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

存储过程

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

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);

运行结果:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

轻松驾驭文件重命名:一键实现文件名更改并高效复制新文件名,让文件管理变得简单高效

在信息爆炸的时代,我们的电脑中存储着成千上万的文件,这些文件或是珍贵的回忆,或是重要的工作资料。然而,随着时间的推移,我们可能需要对这些文件进行整理和管理,其中最常见的一项操作就是文件名的重命名。…

记一次对ouija渗透测试c语言逆向学习

概要 初始知识 web应用枚举 二进制逆向 文件枚举 堆栈溢出 学到知识 hash长度攻击 任意文件读取 二进制逆向分析 信息收集 端口扫描 nmap --min-rate 1000 -p- 10.129.30.104 发现22,80,3000端口 网站探测 目录枚举 feroxbuster -u http://10.1…

【JVM】Java虚拟机运行时数据分区介绍

JVM 分区(运行时数据区域) 文章目录 JVM 分区(运行时数据区域)前言1. 程序计数器2. Java 虚拟机栈3. 本地方法栈4. Java 堆5. 方法区6. 运行时常量池7. 直接内存 前言 之前在说多线程的时候,提到了JVM虚拟机的分区内存…

数值稳定性、模型初始化和激活函数

一、数值稳定性:神经网络很深的时候数据非常容易不稳定 1、神经网络梯度 h^(t-1)是t-1层的输出,也就是t层的输入,y是需要优化的目标函数,向量关于向量的倒数是一个矩阵。 2、问题:梯度爆炸、梯度消失 (1&…

OpenAI“断供”对我们的影响之我见

1.新闻 OpenAI决定于7月关闭国内GPT访问 近日,美国人工智能公司OpenAI宣布,将于7月起关闭对中国内地的GPT访问,此举引发了业内广泛关注和讨论。以下是关于此新闻的具体信息: 关闭时间:OpenAI官方推送的邮件指出&…

Leaflet【五】Marker点闪烁效果

控制点的透明度 在创建marker的构造当中会传递一个配置对象,这个里面就可以配置对应的透明度opacity,那么只需要去修改这个透明度的值就好了。通过定时器去一直改值即可。 const changeOpacity (entity) > {let i 1;let int setInterval(() >…

谷歌发布两款新Gemma 2大语言模型;阿里云开源Qwen2-72B模型荣登榜首

🦉 AI新闻 🚀 谷歌发布两款新Gemma 2大语言模型 摘要:谷歌发布Gemma 2大语言模型,包括90亿和270亿参数两种版本。Gemma 2在推理性能、效率和安全性上较第一代有显著提升。27B模型的性能媲美更大规模的主流模型,且部署…

【C++题解】1721. 输出个位为5或者个位为8数

问题:1721. 输出个位为5或者个位为8数 类型:简单循环 题目描述: 请从小到大输出 1∼n 中所有个位为 5 或者个位为8 的所有的整数,每行 1 个。 比如,假设 n20,那么满足条件的数输出如下: 5 8 1…

尊重·理解·协同:论团队合作中的认知提升与信誉建设

零、背景 为什么写博客? 给自己灌输大道理—唠叨哲学 定期总结:反思这段时间内的生活、学习或工作中的得失,提炼出具有普适性的经验和教训。 紧跟热点新闻来有点流量 独特视角:尽量优先进行——人云亦云,先学某一…

MQTT遗嘱信息(2)

接前一篇文章:MQTT遗嘱信息(1) 本文内容参考: 什么是MQTT遗嘱消息?如何配置和处理遗嘱消息?_mqtt last will-CSDN博客 MQTT 协议学习:Retained(保留消息) 与 LWT&#x…

Stream Lua Nginx Module 插件一键安装

文章目录 一、场景说明二、脚本职责三、参数说明四、操作示例五、注意事项 一、场景说明 本自动化脚本旨在为提高研发、测试、运维快速部署应用环境而编写。 脚本遵循拿来即用的原则快速完成 CentOS 系统各应用环境部署工作。 统一研发、测试、生产环境的部署模式、部署结构、…

Linux容器篇-Docker容器的使用

文章目录 前言一、Docker的安装主机环境准备关闭防火墙关闭selinux时间同步关闭 swap配置操作系统yum源配置国内Docker-ce镜像源注意 二、安装docker-ce三、配置镜像加速器阿里云镜像加速器生成 四、Docker的使用Docker 客户端获取镜像启动容器查看所有的容器:启动已…

内外网共享文件最优方案,了解一下

基于安全性、合规性、数据防泄漏等原因,为了保护核心数据,企业一般会做内外网隔离,隔离后仍存在数据交换共享的需求。数字化时代,数据的流通与共享成为企业和团队之间日常运营的关键环节。内外网共享文件是指在内网和外网之间共享…

【知识学习】阐述Unity3D中动画渲染的概念及使用方法示例

Unity3D中的卡通渲染(Cartoon Rendering)是一种渲染技术,它模仿传统手绘动画或漫画的视觉效果。这种渲染风格通常具有鲜明的颜色、清晰的轮廓线和简化的光影效果,常用于制作动画、游戏和其他视觉媒体。 卡通渲染的基本概念 轮廓…

绩效管理过程中,定性指标的设计评价怎么做?

导读:企业在设计具体的定性考核标准时,可以运用一些量化的方式,使得最终的考核更具针对性和操作性,但是定性指标不可能完全量化分析,管理者不能过度追求量化原则,设计一些无效的指标。 绩效管理过程中&…

03逻辑门电路

分立门电路: 集成门电路: TTL门电路 MOS门电路:NMOS门电路、PMOS门电路、CMOS门电路 BICMOS门电路:CMOS的高输入阻抗和TTL的高放大倍数的结合 向更低功耗、更高速度发展 MOS管的Rdson在可变电阻区的阻值也一般会小于1000欧姆 …

django学习入门系列之第三点《伪类简单了解》

文章目录 hover&#xff08;伪类&#xff09;after&#xff08;伪类&#xff09;往期回顾 hover&#xff08;伪类&#xff09; 伪类指的是用冒号加的 hover样式指的是&#xff0c;当用户光标移动到设定区域后&#xff0c;所执行的用法 如&#xff1a; <!DOCTYPE html>…

并发编程工具集——Lock和Condition(上)(十二)

简述&#xff1a;Java SDK 并发包通过 Lock 和 Condition 两个接口来实现管程&#xff0c;其中 Lock 用于解决互斥问题&#xff0c;Condition 用于解决同步问题。 再造管程的理由和期望 理由&#xff1a;synchronized 没有办法解决“破坏不可抢占条件方案”。 原因是synchroniz…

Java NIO Buffer概念

针对每一种基本类型的 Buffer &#xff0c;NIO 又根据 Buffer 背后的数据存储内存不同分为了&#xff1a;HeapBuffer&#xff0c;DirectBuffer&#xff0c;MappedBuffer。 HeapBuffer 顾名思义它背后的存储内存是在 JVM 堆中分配&#xff0c;在堆中分配一个数组用来存放 Buffe…

springboot基于web模式的师资管理系统的设计与实现-计算机毕业设计源码040928

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设师资管理系统 。 本设…