MySQL Cursor在存储过程中的使用

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游标的语法,请看:

http://dev.mysql.com/doc/refman/5.6/en/cursors.html

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值