mysql存储过程基本语法

news2024/11/23 11:26:30

本文来说下mysql存储过程基本语法

文章目录

  • 基本语法
  • 使用实例
  • 变量的使用
    • 变量定义
    • declare语句
    • 变量赋值
    • 用户变量
  • 存储过程的参数
    • in 输入参数
    • out 输出参数
    • inout输入输出参数
  • 本文小结


基本语法

存储过程就是具有名字的一段代码,用来完成一个特定的功能。创建的存储过程保存在数据库的数据字典中

// 声明存储过程
CREATE
    [DEFINER = { user | CURRENT_USER }]
 PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

// 存储过程的参数
proc_parameter:
    [ IN | OUT | INOUT ] param_name type

// 指定存储过程的特性
characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
 
// SQL代码的内容,可以用BEGIN...END来表示SQL代码的开始与结束
routine_body:
  Valid SQL routine statement
 
[begin_label:] BEGIN
  [statement_list]
    ……
END [end_label]

delimiter问题

在Mysql中,因为存储过程中的SQL语句必须以分号结尾,而mysql的cmd窗口在遇到sql语句加分号时,会直接执行语句,而发送冲突导致存储过程创建失败。

因此我们要修改存储过程的结束符,让mysql可以识别。


使用实例

存在一张员工表,有如下的三条数据

在这里插入图片描述

创建一个存储过程,查询员工的基本信息

delimiter//
create procedure get_employee_info()
begin
select * from employee_info;
end//
delimiter;

创建成功

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

如何调用存储过程

call sp_name[(传参)];

调用成功

在这里插入图片描述

删除存储过程

DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

这个语句被用来移除一个存储程序或函数。即,从服务器移除一个制定的子程序。

在这里插入图片描述


变量的使用

变量定义

局部变量声明一定要放在存储过程体的开始:

DECLAREvariable_name [,variable_name...] datatype [DEFAULT value];

使用实例

在这里插入图片描述

结果

在这里插入图片描述


declare语句

DECLARE仅被用在BEGIN … END复合语句里,并且必须在复合语句的开头,在任何其它语句之前。

在这里插入图片描述


变量赋值

SET 变量名 = 表达式值 [,variable_name = expression …]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


用户变量

用户变量名一般以@开头

在这里插入图片描述


存储过程的参数

常用格式

CREATE PROCEDURE 存储过程名称(参数模式 参数名 参数类型)
BEGIN
	存储过程体
END

参数模式有三种

  1. IN:该参数可以作为输入,也就是该参数需要调用方传入值
  2. OUT:该参数可以作为输出,也就是该参数可以作为返回值
  3. INOUT:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

in 输入参数

使用实例:根据员工工号查询出员工信息

CREATE DEFINER=`tmis`@`%` PROCEDURE `get_employee_info`
(IN p_employeeCode INTEGER)
begin
   select * from employee_info
   WHERE employee_code = p_employeeCode;
end

在这里插入图片描述在这里插入图片描述


out 输出参数

out 表示从存储过程内部传值给调用者,封装有参数的存储过程,传入员工编号,返回员工名字

CREATE DEFINER=`tmis`@`%` PROCEDURE `get_employee_info`
(IN p_employeeCode INTEGER,out out_employeeName varchar(50))
begin
   select employee_name into out_employeeName from employee_info
	 WHERE employee_code = p_employeeCode;
end

调用与查询

在这里插入图片描述在这里插入图片描述


inout输入输出参数

inout 表示从外部传入的参数经过修改后可以返回的变量,既可以使用传入变量的值也可以修改变量的值(即使函数执行完)

CREATE DEFINER=`tmis`@`%` PROCEDURE `get_employee_info`
(INOUT p varchar(50))
begin
   select employee_name into p from employee_info
	 WHERE employee_code = p;
end

在这里插入图片描述
在这里插入图片描述


本文小结

本文介绍了一些mysql存储过程的基本语法知识与内容。

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

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

相关文章

2022年全球白帽常用工具排行榜TOP 10

虽然此时还未到2022年年底,但并不妨碍我们整理一份2022年全球白帽常用的工具榜单,希望能给白帽们和企业安全人员们带来一定的借鉴和参考。 一方面,工具的重要性不言而喻,各大SRC的白帽们也有深刻的切身体会。一个好用且靠谱的工具…

带模糊加工时间的柔性作业车间调度理论和GA复现(python)

文章目录1.模糊作业车间1.1 模糊数1.2 三角模糊数操作1.3 模糊甘特图2.FJSP模糊加工时间GA2.1 GA算法设置2.2 python代码2.3 测试结果1.模糊作业车间 1.1 模糊数 论域X上的模糊集合A由隶属度函数u(x)表示,u(x)取值[0,1]。如果A为三角模糊数,A可以表示为…

软件测试复习07:软件测试过程

作者:非妃是公主 专栏:《软件测试》 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录测试计划测试设计测试执行测试监控测试结束软件测试过程主要有5个阶段:测试计划、测试设…

《深入浅出计算机组成原理》学习笔记 Day3

ELF和静态链接1. 程序执行&#xff1a;编译、链接和装载2. ELF 格式和链接3. 总结延伸参考1. 程序执行&#xff1a;编译、链接和装载 有这么两个C文件&#xff1a; \\ add.c int add(int a, int b) {return a b; }\\ test.c #include <stdio.h> int main() {int a 1;…

JVM学习(三):聊聊内存泄漏(memory leak)

一、什么是内存泄漏&#xff08;memory leak&#xff09;可达性分析算法来判断对象是否是不再使用的对象&#xff0c;本质都是判断一个对象是否还被引用。那么对于这种情况下&#xff0c;由于代码的实现不同就会出现很多种内存泄漏问题&#xff08;让JVM误以为此对象还在引用中…

最新光速配置VScode运行C/C++教程(W11适用)

文章目录1.下载MingW编译器&#xff1a;2.解压7z压缩文件方法3.VScode配置4.下面看看成果&#xff1a;1.下载MingW编译器&#xff1a; 下载地址 往下面拖找到上面这个东西-下载最新版本 2.解压7z压缩文件方法 7z解压程序官网 下它&#xff01;相信这个时候在装的一般都是6…

【ubuntu | cuda】ubuntu22.04 安装cuda11.3方法

every blog every motto: You can do more than you think. 0. 前言 ubuntu22.04 安装cuda11.3方法记录 1. 正文 1.1 方法一&#xff1a; https://developer.nvidia.com/cuda-11.3.0-download-archive?target_osLinux&target_archx86_64&DistributionUbuntu&…

服务网格领域的百花齐放,是否存在一个更优解?

作者lingsamuel&#xff0c;API7.ai 云原生技术专家&#xff0c;Apache APISIX Committer。 作者林志煌&#xff0c;API7.ai 技术工程师&#xff0c;Apache APISIX contributor。 服务网格是一种技术架构&#xff0c;它用于管理微服务系统中各个服务之间的通信&#xff0c;旨在…

关于volatile和gcc 优化的的思考

volatile是一个特征修饰符&#xff08;type specifier&#xff09; volatile的作用是作为指令关键字&#xff0c;确保本条指令不会因编译器的优化而省略&#xff0c;且要求每次直接读值。这是百度百科的介绍&#xff0c;那编译器是具体是怎么优化的呢。我们知道gcc 是有O0 O1 O…

torch.nn.MSELoss扒开看看它

目录官网介绍Toy默认参数定制参数预测问题-线性回归官网介绍 Toy 设X,Y∈Rnd\mathbf{X} , \mathbf{Y} \in \mathbf{R}^{n\times d}X,Y∈Rnd&#xff0c;假设其中X\mathbf{X}X是模型的输入&#xff0c;Y\mathbf{Y}Y是真实标签 默认参数 torch.nn.MSELoss(size_averageNone, r…

【Java IO流】字节流详解

文章目录1. IO 流概述2. IO 流分类3. 字节输出流4. 字节输入流5. 文件拷贝6. IO 流中的异常处理7. 总结Java编程基础教程系列1. IO 流概述 什么是 IO 流&#xff1f; IO 流是存取数据的解决方案&#xff0c;在计算机中数据存放在硬盘的文件中&#xff0c;如果程序需要使用这些…

Gitlab 项目上传到Maven仓库

Gitlab 项目上传到Maven仓库Gitlab 项目上传到Maven仓库1. 生成Deploy tokens2.项目工程AS的build.gradle配置Maven3. 拉取Maven库Gitlab 项目上传到Maven仓库 1. 生成Deploy tokens 项目地址-》Settings-》Repository-》Deploy tokens-》Expand-》输入Name-》Create deploy …

回收租赁商城系统功能拆解10讲-会员等级

回收租赁系统适用于物品回收、物品租赁、二手买卖交易等三大场景。 可以快速帮助企业搭建类似闲鱼回收/爱回收/爱租机/人人租等回收租赁商城。 回收租赁系统支持智能评估回收价格&#xff0c;后台调整最终回收价&#xff0c;用户同意回收后系统即刻放款&#xff0c;用户微信零…

数据分析面试题--SQL面试题

目录标题1&#xff0c;UNION和JOIN的区别2&#xff0c;连续登录问题3&#xff0c;窗口函数和普通聚合函数的区别4&#xff0c;窗口函数的基本用法5&#xff0c;序号函数:row_number(),rank(),dense_rank()的区别6&#xff0c;窗口函数涉及的一些其他函数7&#xff0c;次日留存率…

CAD软件中如何标注曲线长度?

在CAD设计过程中&#xff0c;如果想要用CAD标注图纸中某一曲线的长度该如何操作呢&#xff1f;今天小编就来给大家分享一个CAD标注曲线长度的小工具&#xff0c;有需要的小伙伴可以一起来看看哦&#xff01; 此插件可以用多种方式标注多段线、样条曲线的长度&#xff0c;并可以…

Go语言笔记:UDP基础使用与广播

文章目录目的基础说明作为服务器使用作为客户端使用广播总结目的 UDP是比较基础常用的网络通讯方式&#xff0c;这篇文章将介绍Go语言中UDP基础使用的一些内容。 本文中使用 Packet Sender 工具进行测试&#xff0c;其官网地址如下&#xff1a; https://packetsender.com/ 基…

知识站点上关于Notes Domino话题几个问答

大家好&#xff0c;才是真的好。 今天周一我们继续不讲技术&#xff0c;介绍一下知识网站上关于Notes/Domino几个有趣问题的讨论。 国内的知识网站头把交椅是知乎&#xff0c;在中文界中是扛把子.不过在国外&#xff0c;最流行的知识网站叫做Quora&#xff0c;上面关于Notes/…

【Java】【系列篇】【Spring源码解析】【三】【体系】【PostProcessors体系】

PostProcessor英文翻译为后置处理器&#xff0c;在Spring体系里面主要针对的对象为Bean和BeanFactory.有着收尾或完善的作用。一、BeanPostProcessor分支 1.1、作用 在Bean对象在实例化和依赖注入完毕后&#xff0c;在显示调用初始化方法的前后添加我们自己的逻辑。注意是Bean…

【学习笔记】【Pytorch】十六、模型训练套路

【学习笔记】【Pytorch】十六、模型训练套路一、内容概述二、模型训练套路1.代码实现&#xff1a;CPU版本2.代码实现&#xff1a;优先GPU版本a3.代码实现&#xff1a;优先GPU版本b4.计算测试集上的正确率三、使用免费GPU训练模型一、内容概述 本内容主要是介绍一个完整的模型训…

信用评分分卡简介

背景 随着金融科技初创企业的兴起&#xff0c;过去 5 年中出现了许多新的消费信贷机构&#xff0c;与传统银行展开竞争。他们通常瞄准银行认为规模太小或因金融危机期间发生的后期损失而不得不削减贷款的细分市场。通俗的讲就是消费金融公司瞄准了银行的次贷市场。 这些新的消…