移动光标的方法,移动光标的方法
本文内容列表:
- 1、mysql中如何遍历游标
- 2.Mysql使用游标遍历数据来批量更新数据。我急切地向mysql大神寻求答案。
- 3. MySQL游标的定义和使用
如何在mysql中循环游标
- 输入 ID 并输出姓名和性别的存储过程。有多个条目具有相同的 ID,因此需要游标。
DELIMITER //
CREATE PROCEDURE p5(IN v_id INT)
BEGIN
DECLARE nodata INT DEFAULT 0;#注意:该变量声明必须放在游标声明之前
DECLARE v_name VARCHAR( 30 ) ;
声明 v_sex CHAR(3);
声明 c_ns CURSOR FOR SELECT NAME,sex FROM t WHERE id = v_id;
声明未找到的退出处理程序 SET nodata = 1;#读取数据时对于最后一项,将变量设置为1
OPEN c_ns;
WHILE nodata = 0 DO# 判断这是否是最后一项数据
FETCH c_ns INTO v_name,v_sex;
SELECT v_name, v_sex ,没有数据;
结束同时;
CLOSE c_ns;
END
//
--执行存储过程
mysql call p5(2);
+------ --+-- - ----+--------+
| v_name | v_性别 |没有数据 |
+--------+-----+--------+
|歌曲|女性 | 0 |
+--------+------+--------+
1 行一组(0.04 秒)
+- -- ----+--------+--------+
| v_name | v_性别 |没有数据 |
+--------+--------+--------+
|那么|男 | 0 |
+--------+ -------+--------+
1 行(0.05 秒)
问题 好的, 0 受影响行,1 警告(0.05 秒)
--注意:CONTINUE 会继续当前块中的指令,并在设置done=1 后继续执行下一条指令。 EXIT 在设置done=1后离开当前指令块
所以这里使用EXIT(黄色阴影区域)。
如果是连续的,结果如下:
mysql call p5(2);
- //
+--------+-------+
| v_name | v_性别 |
+--------+----- --+
|歌曲|女性 |
+--------+--------+
1 行一组(0.00 秒)
+ --------+ -- -----+
| v_name | v_性别 |
+--------+--------+
|那么|男 |
+--------+-------+
1 行一组(0.01 秒)
+------- -+ -- -----+
| v_name | v_性别 |
+--------+--------+
|那么|男 |
+--------+------+
1 行集合(0.02 秒)
查询正常,0 行受影响,1 条警告(0.03 秒)

mysql使用游标遍历数据来批量更新数据。急求mysql 大神的答案
根据您的信息,正确答案应该是:希望您接手
CREATE DEFINER=`root`@`localhost` 过程 `P_updateUd18`(`Param` int(11))
开始
声明 Rcount,i,j,k,Rparentid,myId int(11) 默认 0;
声明 Robjname,Robjname23,Robjname45,Robjname67,Robjname89 varchar(9) default "";
从 ud18 中选择 Rcount 中的计数(id);
重复
在 myId 中选择 id,objname,从 ud18 中选择 Robjname按 ID 限制排序 i,1;
set Robjname23=SUBSTRING(Robjname,2,2);
set Robjname45=SUBSTRING(Robjname,4,2);
set Robjname67=SUBSTRING(Robjname,6 , 2);
set Robjname89=SUBSTRING(Robjname,8,2);
if Robjname890 then
set @sql=concat("select id in @abc from ud18 where objname like '",left( Robjname ,7),"00","'");
从@sql准备stmt;
执行stmt;
设置Rparentid=@abc;
update ud18 setparentid=Rparentid where id=myId ;
elseif Robjname670 then
set @sql=concat("select id in @abc from ud18 where objname like '",left(Robjname,5), "0000", "'");
从@sql准备stmt;
执行stmt;
设置Rparentid=@abc;
update ud18 set Parentid=Rparentid where id=myId;
elseif Robjname450 then
set @sql=concat("select id in @abc from ud18 where objname like '",left(Robjname,3),"000000" ,"'");
从@sql准备stmt;
执行stmt;
设置Rparentid=@abc;
update ud18 setparentid=Rparentid where id=myId;
elseif Robjname230 then
-- set @sql=concat("select id in @abc from ud18 where objname like '",left(Robjname,1 ),"00000000","'");
--从@sql准备stmt;
--执行stmt;
--设置Rparentid=@abc;
update ud18 setparentid=0 where id=myId;
else
set j=0;
end if;
set i=i+1;
tot iRcount end Repeat;
END;
MySQL游标的定义与使用
你可以从字面上理解什么是光标。光标就像漂浮在水面上的标记。这个标记可以来回游动,有时游到这里,有时游到那里。这里的河水可以理解为数据。集合,这个标记在这些数据之间来回游动。
MySQL为什么有游标的概念?由于SQL语言是面向集合的语句,因此每次查询都是数据的集合,无法单独处理任何记录。如果要单独处理每条记录,则需要游标。
游标基本上是编程语言中的 for/foreach 循环。它逐一循环遍历数组(数据集合)中的每一条数据,然后您在 for/foreach 循环中使用评估语句来确定您感兴趣的内容。数据被处理。
在哪里可以使用光标?它们可用于函数、存储过程和触发器。
讨论完概念,我们再来看看固定底部光标的写法。不管概念理解与否,记住下面的设定模式也可以完成搬石子的任务。
1. 声明游标
SELECT 语句是普通的查询语句,例如:SELECT id,age FROM table;
2. 打开游标
在打开游标之前,不会执行游标定义的SQL语句。经过。
3. 检索记录
将当前记录数据保存到变量中。
当 FETCH 没有找到记录时,会抛出异常。异常定义需要以下 HANDLER FOR 语句。
如果游标语句中的SELECT语句中有多个字段,则INTO后需要多个变量来接收它们。
4、设置终止条件
该语句的作用是指定一个条件,告诉程序所有数据都已经遍历完毕,可以终止了。因为游标使用WHILE循环来读取每一条数据,所以必须给WHILE一个结束条件。
处理类型:是,EXIT立即结束。 CONTINUE 继续下面的处理。
异常类型:通常指定为 NOT FOUND,表示未找到数据。
异常处理:发生异常时如何处理。这里通常会改变一个变量的值来记录异常的发生,比如SET flat = 1,详细用法请看下面的例子。
5. 关闭光标
实际代码:
完成,明白了吗?如果你不明白也没关系。游标处理是固定格式的。按照上例中设置的格式并将其应用到您的程序中。这就对了。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网