今天写个稍微复杂一点点的存储过程碰到两个容易忽略的点分享一下。如果有筒子刚好碰到相同的问题可以少再纠结一下, 木有啥技术含量的。。。
1、一个存储过程使用游标的例子
假设很简单的一个要求:从t表里面遍历出f,然后再到t2表中查找符合条件的记录打出来。
declare stopFlag int;
DECLARE cur_name CURSOR for f from t;
DECLARE CONTINUE HANDLER FOR NOT FOUND set stopFlag=1;
set stopFlag=0;
open cur_name;
REPEAT
FETCH cur_name INTO temp_f;
begin
select f3 into my_result from t2 where f2=temp_f limit 1;
end;
UNTIL stopFlag = 1
END REPEAT;
CLOSE cur_name;
|
2、 点1
假设t表有n条记录,这个循环体循环n次?
实际上是n+1次。因为到达t的最后一行的时候stopFlag还是1。这个值的修改是在下一次fetch的时候改的,但是改完后就进入begin了,没有再判断,所以会多执行一次。这多出来的一次的temp_f的值和上一次相同。
解决方法:在进入Begin之后再判断一下stopFlag的值
3、 点2
有时候会发现没有循环到n次循环就退出,什么原因?
原因是如果select f3 into my_result from t2 where f2=temp_f limit 1; 条件无法匹配行,在试图对my_result赋值的时候就会触发set stopFlag=1; 导致在之后的until判断的时候满足退出条件而退出。
解决方法:特别小心循环体内部出现的这种语句。如果有的话,在进入begin之后把stopFlag存入一个临时变量,在until之前把这个临时变量赋回去就行了
分享到:
相关推荐
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...
在这个"MySQL存储过程学习"的主题中,我们将深入探讨存储过程的定义、创建、调用以及其在数据库管理中的实际应用。 首先,理解存储过程的基本概念是至关重要的。存储过程是一组为了完成特定功能的SQL语句集合,这些...
根据提供的文件内容,本篇实验报告主要围绕MySQL数据库中存储过程和函数的应用,涵盖了创建存储过程、函数、游标以及异常处理等高级特性。下面将详细解析报告中的每个知识点。 1. 创建存储过程 存储过程是一种在...
MySQL 存储过程编程 MySQL 存储过程编程是指在 MySQL 数据库中使用存储过程来实现业务逻辑的...通过学习 MySQL 存储过程编程,可以提高开发者的编程能力和数据库管理能力,并且可以提高数据库的安全性和可维护性。
mysql获取两个时间相差年月日:使用mysql存储过程,实现计算两个时间的差值,并用年月日时分秒的格式输出,且从大到小为0时则不展示对应单位(如:相差1小时20秒 则展示'1时0分20秒')
本文实例讲述了mysql存储过程之返回多个值的方法。分享给大家供大家参考,具体如下: mysql存储函数只返回一个值。要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程。咱们先来看一个orders表它的...
由于MYSQL的源码包太大,一次上传不了,所以我做了分段压缩,这是第一段,请将两段一起下完解压使用。mysql源码包与Apache和PHP源码包一起安装可以搭建完整的Apache服务,另外两个我也有上传,谢谢关注!
在学习过程中,你可以通过实例练习来熟悉这些概念,例如创建一个简单的存储过程来计算两个数字的和,或者创建一个复杂的存储过程来处理多表之间的数据操作。同时,了解如何在实际项目中应用存储过程,将有助于你更好...
以下是对MySQL 5.5源码安装的详细过程和相关知识点: 1. **源码获取**: - `mysql-5.5.43.tar.gz` 是MySQL 5.5.43版本的源代码压缩包,由于官方下载链接可能不可用,因此这种分享方式对于开发者来说非常宝贵。 2....
最后,"mysql存储过程.pdf"专注于MySQL的存储过程。存储过程是预编译的SQL语句集合,可以提高数据库操作的性能,减少网络流量,并增强数据安全。在PDF文档中,你将学习如何定义、调用和管理存储过程,以及如何使用...
MySQL学习源码(MySQL入门教程).zipMySQL学习源码(MySQL入门教程).zipMySQL学习源码(MySQL入门教程).zipMySQL学习源码(MySQL入门教程).zipMySQL学习源码(MySQL入门教程).zipMySQL学习源码(MySQL入门教程).zipMySQL...
MySQL源码学习讲义是一个关于深入理解MySQL数据库系统内核的资源集合,主要针对对数据库原理和MySQL实现感兴趣的开发者或数据库管理员。这份讲义可能是PDF文档形式,包含了MySQL的源码分析、设计原理以及实现机制的...
MySQL源码安装脚本涉及了数据库管理系统MySQL的安装过程,主要通过shell脚本来自动化操作,以提高效率并减少手动配置的复杂性。在Linux环境中,源码安装是一种常见且灵活的安装方式,允许用户自定义编译选项和依赖项...
MySQL 8.2.0的源码分析将涉及多个关键知识点: 1. SQL解析与执行:MySQL的核心在于其SQL解析器,它将用户输入的SQL语句转换成可执行的计划。这部分源码揭示了如何解析各种SQL语句,包括SELECT、INSERT、UPDATE、...
这里我们将深入探讨这两个源码的学习工程。 MySQL源码分析: 1. **SQL解析**:MySQL的解析器负责将SQL语句转化为可执行的抽象语法树(AST)。源码中,你可以看到词法分析和语法分析的过程,这对于理解SQL如何被处理...
`mysql-8.2.0.zip`是MySQL的一个特定版本,以下是关于这个版本的一些关键知识点: 1. **版本更新**:MySQL 8.2.0是一个重要的里程碑,它可能包含了自上一个稳定版本以来的大量改进和新特性。通常,新版本会带来性能...
- 数据库模型:MySQL 基于关系模型,用表格(表)来存储数据,每个表有多个列(字段)和行(记录)。 - SQL 语言:用于操作 MySQL 的标准语言,包括 SELECT、INSERT、UPDATE、DELETE 等命令。 - 数据库设计:遵循...
学习这两个源码实例,可以帮助读者掌握易语言与MySQL的结合使用,提升数据库管理能力。通过阅读源码,了解其实现逻辑,可以加深对数据库操作的理解,并为实际项目开发积累经验。 总结,易语言结合MySQL的源码学习,...
### 源码安装MySQL 5.6详细步骤与知识点解析 #### 一、环境准备与检查 在开始安装MySQL 5.6之前,确保Linux系统满足以下条件: 1. **GCC版本检查**:通过`rpm -qa | grep gcc`命令来确认已安装的GCC版本。示例中...
Java MySQL驱动源码是连接Java应用程序与MySQL数据库的关键组件,其主要实现是通过JDBC(Java Database Connectivity)接口。在Java中,JDBC提供了一组API,使得开发人员能够用标准的Java语言来访问和操作各种数据库...