博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL Cursor在存储过程中的使用
阅读量:6158 次
发布时间:2019-06-21

本文共 2144 字,大约阅读时间需要 7 分钟。

hot3.png

MySQL Cursor在存储过程中的使用

游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。

declares a cursor and associates it with a SELECT statement that retrieves the rows to be traversed by the cursor.

MySQL supports cursors inside stored programs. The syntax is as in embedded SQL. Cursors have these properties:

  • Asensitive: The server may or may not make a copy of its result table

  • Read only: Not updatable

  • Nonscrollable: Can be traversed only in one direction and cannot skip rows

新建以下表

create table t3(    id int not null,    num_t int not null,    primary key (id));create table t4(    id int not null,    num_tt int not null,    primary key (id));insert into t3 (id,num_t) values(1,2),(3,4),(5,6),(6,2),(7,4),(8,6);insert into t4 (id,num_tt) values(1,2),(3,4),(5,6),(9,2),(12,4),(76,6);create table t5(    id int not null,    num_ttt int not null,    primary key (id));

新建一个存储过程,并在存储过程中使用游标对数据集进行遍历,并操作数据,如下:

mysql> DELIMITER //mysql>mysql> CREATE PROCEDURE curdemo()    -> BEGIN    ->   DECLARE done INT DEFAULT FALSE;    ->   DECLARE a, b, c INT;    ->   DECLARE cur1 CURSOR FOR SELECT id,num_t FROM test.t3;    ->   DECLARE cur2 CURSOR FOR SELECT num_tt FROM test.t4;    ->   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;    ->    ->   OPEN cur1;    ->   OPEN cur2;    ->    ->   read_loop: LOOP    ->     FETCH cur1 INTO a, b;    ->     FETCH cur2 INTO c;    ->     IF done THEN    ->       LEAVE read_loop;    ->     END IF;    ->     IF b < c THEN    ->       INSERT INTO test.t5(id,num_ttt) VALUES (a,b);    ->     ELSE    ->       INSERT INTO test.t5(id,num_ttt) VALUES (a,c);    ->     END IF;    ->   END LOOP;    ->    ->   CLOSE cur1;    ->   CLOSE cur2;    -> END    -> //Query OK, 0 rows affected (0.00 sec)mysql>mysql> DELIMITER ;mysql> CALL curdemo();Query OK, 0 rows affected (0.55 sec)mysql> select * from t5;+----+---------+| id | num_ttt |+----+---------+|  1 |       2 ||  3 |       4 ||  5 |       6 ||  6 |       2 ||  7 |       4 ||  8 |       6 |+----+---------+6 rows in set (0.06 sec)mysql>

通过代码,你可以看到在存储过程中通过游标进行数据集的遍历。

以上的存储过程涉及到mysql游标的语法,请看:

==============END==============

转载于:https://my.oschina.net/xinxingegeya/blog/343072

你可能感兴趣的文章
oracle 去掉空格
查看>>
6.13心得
查看>>
Runtime类
查看>>
eclipse decompiler
查看>>
记一个搜索网盘资源的网站
查看>>
jdk1.7和jdk1.8的String的getByte方法的差异
查看>>
java父子进程通信
查看>>
Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案
查看>>
Olap学习笔记
查看>>
Codeforces Round #431 (Div. 1)
查看>>
如何进行数组去重
查看>>
将标题空格替换为 '_' , 并自动复制到剪切板上
查看>>
List Collections sort
查看>>
Mysql -- You can't specify target table 'address' for update in FROM clause
查看>>
使用局部标准差实现图像的局部对比度增强算法。
查看>>
2017-2018-1 20165313 《信息安全系统设计基础》第八周学习总结
查看>>
《代码敲不队》第四次作业:项目需求调研与分析
查看>>
菜鸡互啄队—— 团队合作
查看>>
HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法...
查看>>
SparseArray
查看>>