为什么我们需要SQL的游标?

时间:2016-10-25 02:50:06

标签: mysql sql database

图片有两个表:

Table_1:
id | name | phone
---| ---- | ----
1  | aaaa | 1111
2  | bbbb | 2222
3  | cccc | 3333
...| ...  | ...

Table_2 who is empty now:
id | name | phone
---| ---- | ----

如果你想从table_1中选择一些行并将它们插入table_2,我们可以这样做(第一种方式):

insert into table_2
  select * from table_1 where name='aaaa';

简单易行!只需一行代码,但cursor我们需要代码行(第二种方式使用MySQL的语法):

DECLARE done INT DEFAULT 0;  
DECLARE id int(3);  
DECLARE name char(11);  
DECLARE phone char(11);  
DECLARE mycur CURSOR FOR SELECT * FROM Table_1 where name='aaaa';  
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;  

OPEN mycur;  

REPEAT  
FETCH mycur INTO id,name,phone;  
IF NOT done THEN  
  INSERT INTO Table_2 VALUES (id,name,phone);  
END IF;    
UNTIL done END REPEAT;

CLOSE mycur;  

我的意思是,在正常的producer中,我们是否可以使用第一种方式处理结果集WITHOUT游标? 什么时候我们真的需要一个游标??

1 个答案:

答案 0 :(得分:2)

在无法使用SQL语句的情况下需要游标,在大多数情况下,除了数据操作之外的操作。例如 -

  • 查看表格列表并对每个表格进行操作,例如:收集统计数据/添加/删除分区。
  • 查看客户列表,并为每个客户发送邮件/生成发票

P.S。

非常非常非常罕见的是,SQL语句无法(有效地)操纵数据,并且需要游标,尤其是当数据库支持分析函数时。