`

解决MYSQL 游标最后一行重复

阅读更多
在使用游标时,发现最后一行一直被重复读取

后来在发现应该把读取到的数据放在下一个循环里面使用可以避免重复

代码如下:
DELIMITER $$

USE `test`$$

DROP PROCEDURE IF EXISTS `sp_getAllTableName`$$

CREATE PROCEDURE `sp_getAllTableName`(OUT strAllTableNames VARCHAR(10000))
BEGIN
DECLARE bEnd BOOLEAN DEFAULT FALSE;
DECLARE tbName VARCHAR(255);

# 声明游标
DECLARE curTableNames CURSOR FOR SELECT TABLE_NAME FROM information_schema.tables AS t WHERE t.table_schema="test";

# DECLARE CONTINUE HANDLER
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET bEnd=TRUE;

SET strAllTableNames = "";

# 打开游标
OPEN curTableNames;

# 获取所有行数据
# 获取第一行内容
FETCH curTableNames INTO tbName;

# 循环开始
REPEAT
SET strAllTableNames = CONCAT(strAllTableNames,tbName,";");
# 获取下一行内容
FETCH curTableNames INTO tbName;
# 循环结束
UNTIL bEnd END REPEAT;

# 关闭游标
CLOSE curTableNames;

# 处理完毕
SET strAllTableNames = CONCAT("All table names:",strAllTableNames);

    END$$

DELIMITER ;


CALL test.sp_getAllTableName(@allNames);

SELECT @allNames;
分享到:
评论

相关推荐

    mysql函数、存储过程、触发器、游标.doc

    在存储过程中,游标用于迭代结果集并执行针对每一行的操作。在`oh_qty`存储过程中,`oh_cur`是游标,它从`inv`表中选取数据,并将每行的值分别赋给声明的变量。 4. **触发器**:触发器是数据库自动执行的预定义操作...

    mysql存储过程_游标_项目练习

    MySQL存储过程是数据库管理系统中一组为了完成特定功能的SQL语句集,它可以被保存和重复使用,提高了数据库的效率和可维护性。在本项目实践中,我们将深入学习和运用MySQL的存储过程,同时结合游标这一重要工具进行...

    mysql中游标的使用案例详解(学习笔记)

    在MySQL中,游标是一种重要的机制,它允许用户逐步处理查询结果集中的每一行数据。游标提供了一种方式来迭代处理查询结果,这对于需要逐行访问数据的情况特别有用。 **1.1 游标的基本含义** - **定义**:游标可以被...

    mysql存储过程 游标 循环使用介绍

    在存储过程中,我们首先声明一个游标,然后打开它,通过FETCH语句获取当前行,进行处理,最后关闭游标。在MySQL中,游标的声明通常包括定义返回的列数据类型。例如: ```sql DECLARE feeCodeCursor CURSOR FOR ...

    MySQL使用游标批量处理进行表操作

    游标允许我们按行遍历查询结果集,并对每一行执行特定的操作,例如批量添加索引或字段。下面将详细讲解如何使用游标进行这些操作。 首先,我们需要理解游标的声明、打开、前进和关闭等基本步骤: 1. 声明游标: ...

    游标和存储函数.docx

    在给定的示例中,使用游标`avg_func`统计指定课程的平均分,首先声明游标,然后在循环中处理每一行数据,计算总分和学生数,最后除以学生数得到平均分。 2. 存储函数(Stored Function): 存储函数是一段存储在...

    过程和游标实验.rar

    2. **声明与打开**:在SQL中,先声明游标,指定其对应的查询语句,然后通过OPEN语句打开游标,使游标指向结果集的第一行。 3. **移动与提取**:使用FETCH语句从游标中获取当前行的数据,可以向前或向后移动游标(如...

    MySQL数据库考试试题及答案-34页

    UNIQUE 索引用于保证各行在该索引上的值都不得重复。 12.事务处理 在 MySQL 中,COMMIT 语句用于将事务处理写到数据库中。 13.IS NOT NULL 运算符 IS NOT NULL 运算符用于判断记录中的某个字段是否为 NULL。 ...

    存储过程:利用游标+临时表实现查询

    - 游标(Cursor)允许我们遍历查询结果集,一次处理一行数据。它在数据库处理过程中非常有用,特别是当需要逐行处理数据或进行条件判断时。然而,需要注意的是,游标的使用可能会影响脚本执行速度,因此在不必要的...

    mysql高级部分--包含索引建立优化_函数_存储过程_触发器_及游标

    - `FETCH`: 获取下一行数据。 - `CLOSE`: 关闭游标。 #### 五、事务(Transaction) **定义:** 事务是数据库中一系列操作的集合,这些操作被视为一个单元,要么全部成功,要么全部失败。 **特点:** - **原子性...

    MySQL数据库考试测试试题(附答案).doc

    9. 索引:试题中涵盖了UNIQUE惟一索引的作用,包括保证各行在该索引上的值都不得重复。 10. 事务处理:试题中 涉及到commit命令的使用,用于将事务处理写到数据库。 11. 子查询:试题中涵盖了子查询的概念,包括...

    MySQL-python-1.2.4b4.win32-py2.7

    例如,`row = cursor.fetchone()`将获取第一行数据。 5. **提交事务**:对于需要事务处理的操作,使用`connection.commit()`来提交更改,`connection.rollback()`回滚事务。 6. **关闭连接**:完成数据库操作后,...

    MySQL数据库考试题与答案.doc

    11. 惟一索引:惟一索引的作用是保证各行在该索引上的值都不得重复。 12. 事务处理:可以使用 COMMIT 语句来将事务处理写到数据库中。 13. 查找条件:可以使用 IS NOT NULL 语句来查找条件为姓名不是 NULL 的记录...

    MySQL数据库面试宝典1.pdf

    - **Row-based**:记录每一行数据的变化,适用于大多数情况,因为它可以捕获所有的数据更改。 - **Statement-based**:记录执行的SQL语句,这种方式占用空间较少,但可能因为某些语句无法复制而导致问题。 #### 二...

    mysql-connector-python

    这款驱动程序由Oracle公司开发并维护,遵循Python DB-API 2.0规范,使得在Python应用中操作MySQL数据库变得简单易行。 MySQL Connector/Python支持多种Python版本,包括Python 2.7及更高版本的Python 3。通过这个...

    mysql.rar_mysql 类_mysql类

    MySQL是世界上最流行的关系型数据库管理系统之一,用于存储和管理数据。在PHP中,我们可以使用MySQLi或PDO_MySQL扩展来与MySQL数据库进行交互。在这个名为"mysql.rar"的压缩包中,包含了一个名为"mysql.php"的文件,...

    mysql高级语法教学

    MySQL的窗口函数允许你在一组行(一个“窗口”)上执行计算,而不仅仅是单行。这包括ROW_NUMBER()、RANK()、DENSE_RANK()用于排序,以及LEAD()、LAG()用于获取当前行前后行的值,还有SUM()、AVG()等聚合函数在特定...

    PHP和MySQL Web开发第4版pdf以及源码

    2.7.3 每次读取一行数据:fgets()、fgetss()和fgetcsv() 2.7.4 读取整个文件:readfile()、fpassthru()和file() 2.7.5 读取一个字符:fgetc() 2.7.6 读取任意长度:fread() 2.8 使用其他有用的文件函数 2.8.1 ...

    MySQL数据库考试试题及答案

    - **解析**:实体完整性是指确保关系中每一行数据都具有唯一标识符,通常通过设置外键约束来实现。 ### 21. 删除视图 - **知识点**:使用 `DROP VIEW` 语句来删除视图。 - **示例题目**:SQL语言中,删除一个视图的...

Global site tag (gtag.js) - Google Analytics