在使用游标时,发现最后一行一直被重复读取
后来在发现应该把读取到的数据放在下一个循环里面使用可以避免重复
代码如下:
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;
后来在发现应该把读取到的数据放在下一个循环里面使用可以避免重复
代码如下:
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;
发表评论
-
linux清除mysql占用cache
2013-11-01 10:55 2041在linux内部将cache分为2种: 1、write/rea ... -
规范、经验
2013-11-04 17:23 585尽量不用NULL列 query cach ... -
mysql模拟队列
2013-05-14 13:42 1091-- 初始化数据 DROP TABLE IF EXIST ... -
高性能mysql[第3版]--笔记
2013-05-03 23:35 06.8 6.8.1 mysql构建消息队列 se ... -
生成随机字符串
2013-04-30 10:41 0DELIMITER $$ CREATE FUNCTIO ... -
复制笔记
2013-04-27 17:48 0http://dev.mysql.com/doc/refman ... -
[整理]mysql导入导出
2013-04-24 22:40 0方案一:拷贝物理文件(innodb, innodb_file_ ... -
【整理中】mysql字符集使用
2013-04-24 22:29 0show variables like 'characte ... -
MYSQL监控内容整理
2013-04-24 13:40 0内容 硬解析,软解析,等待事件,表空间,索引,触发器,alte ... -
无限级联分类查询
2013-04-24 09:36 0DROP TABLE IF EXISTS location ... -
mysqldbcompare --使用
2013-04-07 09:39 0http://dev.mysql.com/doc/workbe ... -
MYSQL 发送数据大小计算公式
2013-03-29 16:20 884引用:http://www.realzyy.com/?p=15 ... -
#mysql 笔记#索引长度限制
2013-03-18 12:11 852http://dev.mysql.com/doc/refman ... -
mysqldump简单使用
2013-01-21 15:27 0mysqldump -B或者--databases:备份指定数 ... -
linux经常登入登出mysql重复输入密码
2013-01-16 17:51 970经常登入、登出mysql,尤其是密码重新输入比较复杂时,使用& ... -
mysql存储过程实现行转列
2012-08-30 16:24 2136把表t_rows中的数据转换 ... -
mysql 判断字符串是否是数字
2012-07-12 10:21 2975查询表table_name中col_name(字符串类型)的值 ... -
[转载]drop 大表效率问题
2012-06-15 09:32 46http://www.mysqlops.com/2011/05 ... -
monyog安装文件
2012-03-26 16:29 1275monyog安装包,绿色版 -
linux sysbench+mysql
2012-02-16 17:25 0一、sysbench安装 tar -zxvf ...
相关推荐
在存储过程中,游标用于迭代结果集并执行针对每一行的操作。在`oh_qty`存储过程中,`oh_cur`是游标,它从`inv`表中选取数据,并将每行的值分别赋给声明的变量。 4. **触发器**:触发器是数据库自动执行的预定义操作...
MySQL存储过程是数据库管理系统中一组为了完成特定功能的SQL语句集,它可以被保存和重复使用,提高了数据库的效率和可维护性。在本项目实践中,我们将深入学习和运用MySQL的存储过程,同时结合游标这一重要工具进行...
在MySQL中,游标是一种重要的机制,它允许用户逐步处理查询结果集中的每一行数据。游标提供了一种方式来迭代处理查询结果,这对于需要逐行访问数据的情况特别有用。 **1.1 游标的基本含义** - **定义**:游标可以被...
在存储过程中,我们首先声明一个游标,然后打开它,通过FETCH语句获取当前行,进行处理,最后关闭游标。在MySQL中,游标的声明通常包括定义返回的列数据类型。例如: ```sql DECLARE feeCodeCursor CURSOR FOR ...
游标允许我们按行遍历查询结果集,并对每一行执行特定的操作,例如批量添加索引或字段。下面将详细讲解如何使用游标进行这些操作。 首先,我们需要理解游标的声明、打开、前进和关闭等基本步骤: 1. 声明游标: ...
在给定的示例中,使用游标`avg_func`统计指定课程的平均分,首先声明游标,然后在循环中处理每一行数据,计算总分和学生数,最后除以学生数得到平均分。 2. 存储函数(Stored Function): 存储函数是一段存储在...
2. **声明与打开**:在SQL中,先声明游标,指定其对应的查询语句,然后通过OPEN语句打开游标,使游标指向结果集的第一行。 3. **移动与提取**:使用FETCH语句从游标中获取当前行的数据,可以向前或向后移动游标(如...
UNIQUE 索引用于保证各行在该索引上的值都不得重复。 12.事务处理 在 MySQL 中,COMMIT 语句用于将事务处理写到数据库中。 13.IS NOT NULL 运算符 IS NOT NULL 运算符用于判断记录中的某个字段是否为 NULL。 ...
- 游标(Cursor)允许我们遍历查询结果集,一次处理一行数据。它在数据库处理过程中非常有用,特别是当需要逐行处理数据或进行条件判断时。然而,需要注意的是,游标的使用可能会影响脚本执行速度,因此在不必要的...
- `FETCH`: 获取下一行数据。 - `CLOSE`: 关闭游标。 #### 五、事务(Transaction) **定义:** 事务是数据库中一系列操作的集合,这些操作被视为一个单元,要么全部成功,要么全部失败。 **特点:** - **原子性...
9. 索引:试题中涵盖了UNIQUE惟一索引的作用,包括保证各行在该索引上的值都不得重复。 10. 事务处理:试题中 涉及到commit命令的使用,用于将事务处理写到数据库。 11. 子查询:试题中涵盖了子查询的概念,包括...
例如,`row = cursor.fetchone()`将获取第一行数据。 5. **提交事务**:对于需要事务处理的操作,使用`connection.commit()`来提交更改,`connection.rollback()`回滚事务。 6. **关闭连接**:完成数据库操作后,...
11. 惟一索引:惟一索引的作用是保证各行在该索引上的值都不得重复。 12. 事务处理:可以使用 COMMIT 语句来将事务处理写到数据库中。 13. 查找条件:可以使用 IS NOT NULL 语句来查找条件为姓名不是 NULL 的记录...
- **Row-based**:记录每一行数据的变化,适用于大多数情况,因为它可以捕获所有的数据更改。 - **Statement-based**:记录执行的SQL语句,这种方式占用空间较少,但可能因为某些语句无法复制而导致问题。 #### 二...
这款驱动程序由Oracle公司开发并维护,遵循Python DB-API 2.0规范,使得在Python应用中操作MySQL数据库变得简单易行。 MySQL Connector/Python支持多种Python版本,包括Python 2.7及更高版本的Python 3。通过这个...
MySQL是世界上最流行的关系型数据库管理系统之一,用于存储和管理数据。在PHP中,我们可以使用MySQLi或PDO_MySQL扩展来与MySQL数据库进行交互。在这个名为"mysql.rar"的压缩包中,包含了一个名为"mysql.php"的文件,...
MySQL的窗口函数允许你在一组行(一个“窗口”)上执行计算,而不仅仅是单行。这包括ROW_NUMBER()、RANK()、DENSE_RANK()用于排序,以及LEAD()、LAG()用于获取当前行前后行的值,还有SUM()、AVG()等聚合函数在特定...
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 ...
- **解析**:实体完整性是指确保关系中每一行数据都具有唯一标识符,通常通过设置外键约束来实现。 ### 21. 删除视图 - **知识点**:使用 `DROP VIEW` 语句来删除视图。 - **示例题目**:SQL语言中,删除一个视图的...