MySql使用游标Cursor循环(While)更新数据

#要修改的变量

DECLARE var_ID VARCHAR(50) DEFAULT ‘‘;

#需要修改的数据的数量

DECLARE var_UpdateCount INT;

#当前循环次数

DECLARE var_WhileTimes INT;

#定义游标

DECLARE var_Cur CURSOR FOR

SELECT id FROM table_Name;

#打开游标

OPEN var_Cur;

#将游标的数据进行赋值

FETCH var_Cur INTO var_ID;

#获取循环次数

SELECT COUNT(1) FROM table_Name;

#开始循环

cur_While:WHILE (var_WhileTimes <= var_UpdateCount) DO

#更新数据

UPDATE table_Name SET column_Name = var_ID ;

#下一循环

FETCH var_Cur INTO var_ID;

#结束循环

END WHILE;

此为非常简单的一个示例,记录这部分代码的原因是:第一次写MySql的存储,在利用游标循环更新数据时,如果在循环中,有select语句且查询结果为null时,如果这时使用的是DECLARE CONTINUE HANDLER的方式的话,就会直接跳出循环了,但是这个方式不会,虽然在循环开始之前,又提前查询了一下需要循环的次数,但是这么一个简单的查询语句一般对效率几乎没什么影响,当然,查询游标结果集的语句本身就特别复杂的话另论;记录一下这个经验,在分享的同时,也方便以后参考;刚接触MySql,不足之处,欢迎指教;

时间: 2024-12-26 10:31:38

MySql使用游标Cursor循环(While)更新数据的相关文章

MySQL中游标使用以及读取文本数据

前言 之前一直没有接触数据库的学习,只是本科时候修了一本数据库基本知识的课.当时只对C++感兴趣,天真的认为其它的课都没有用,数据库也是半懂不懂,胡乱就考试过了.现在学习大数据分析,接触了数据挖掘,才感觉到数据库是不可跨越的坎.直到现在才感觉到<操作系统>.<编译原理>.<计算机组成原理>等等课程的重要性.在浩瀚的知识面前,个人是非常渺小的.掌握了一种思想之后,任何事情都不困难,困难的是你是否真的静下心看一看帮助文档.认真的Google.静心.静气.认真.执着. 游标-

oracle和mysql中update联表批量更新数据的区别

之前碰到一个sql语句,在oracle中可以运行,在mysql上就不行,后来查了好久,发现了他们两个联表批量更新数据的区别如下: (借鉴一下别人的例子) update :单表的更新不用说了,两者一样,主要说说多表的更新复制代码 代码如下: Oracle> Oracle的多表更新要求比较严格,所以有的时候不是很好写,我们可以试试Oracle的游标 update ( select t.charger_id_ new_charger_id_ from t_cus_year_status t left

游标cursor:(循环操作批量数据)

declare cursor stus_cur is select * from students;  --定义游标并且赋值(is 不能和cursor分开使用) cur_stu students%rowtype;                  --定义rowtype begin open stus_cur;                            --开启游标 loop                                   --loop循环 exit when s

mySql 事务,游标以及循环

对于Mysql 我也是个初学者,在这里就写写我知道的皮毛,若有错误直管拍砖,我也好学习学习,先谢过! 首先 mysql 没有 Sql sever 一样的 begin tran end tran begin catch end catch .mysql  的事务机制 我理解就是捕捉错误句柄,如果存在就应该rollback,不存在就可以commit.不废话上代码: 1 DECLARE sys_error INT DEFAULT 0; //定义一个表示出错返回的错误变量 2 3 DECLARE CON

Oracle游标循环更新数据案例

declare v_XTXMBH number; v_ZJZJZJRQ varchar2(40); cursor c_job is SELECT XT.XTXMBH AS XTXMBH, QJ.ZJZJZJRQ AS ZJZJZJRQ FROM XTXMXX XT, QJGLXX_ZQL_MID QJ WHERE XT.XTXMBH = QJ.XTXMBH AND XT.XTXMCLRQ >= '20120630' AND (QJ.ZJQHZJRQ IS NULL OR QJ.ZJZJZJRQ

【MySQL】存储过程、游标、循环简单实例

有时候仅凭 sql 语句可能达不到想要的数据操作目的,有可能需要写一些方法体,通过循环判断等操作最终达到目的.那么在数据库里实现这种方法体就需要存储过程了,个人觉得一个带注释的简单实例可以简单粗暴地解决大部分问题,当然要深入学习了解的话还是要看教程文档了,话不多说,上码: [sql] view plain copy create procedure my_procedure() -- 创建存储过程 begin -- 开始存储过程 declare my_id varchar(32); -- 自定义

游标cursor 与循环fetch

本文部分非原创 使用示例: declare myCursor cursor for select ID,[Column1],[Num] from Table1 open myCursor; declare @ID int,@Column1 varchar(50),@Num int fetch next from myCursor into @ID ,@Column1 ,@Num; while @@FETCH_STATUS = 0 begin --do something fetch next f

Oracle游标-循环查询表中数据(表名),并执行

Oralce 表中存有一个字段,该字段存储表名,要把该表中的所有表名查询出来(即表名结果集),且执行结果集from 表名结果集: declare v_ccount varchar2(100); --定义一个游标变量 cursor c_job is --查询该表中的所有表名 select tablename from tbname; c_row c_job%rowtype; begin --循环待处理数据,即以上查出的结果集 for c_row in c_job loop ---执行语句 from

如何实现MySQL随机查询数据与MySQL随机更新数据?

以下的文章主要介绍的是MySQL随机选取数据,对实现MySQ随机查询数据与MySQ随机更新数据的实际操作步骤的描述,以及对其实际操作中所要用到的语句的描述,以下就是对其具体操作步骤的描述. MySQL随机查询数据 以前在群里讨论过这个问题,比较的有意思.mysql的语法真好玩.他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询.翻了手册,找到了下面这个语句,可以完成任务了. SELECT * FROM table_name ORDER BY rand() LIMIT 5; MySQ