MYSQL游标(CURSOR)关于NOT FOUND或02000结束状态只遍历一次的问题
2016-11-25 16:23
232 查看
经常在定义cursor的时候都会定义cursor未找到(NOT FOUND或SQLSTATE '02000')的条件来标识游标结束。
完整的存储过程如下:
CREATE PROCEDURE PR_IMA_XHW_GENERATEOUTPUTTAX()
BEGIN
DECLARE C_C1 VARCHAR(32);
DECLARE C_C2 VARCHAR(32);
DECLARE DONE BOOLEAN DEFAULT 0; #定义结束标识
#定义游标
DECLARE CURSORDATA CURSOR FOR SELECT C1,C2 FROM T1;
#定义游标的结束--当遍历完成时,将DONE设置为1
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET DONE = 1;
OPEN CURSORDATA; #打开游标
FETCH CURSORDATA INTO C_C1,C_C2;
REPEAT
SELECT COLUMNS FROM T2; #注意点!!!
#还有一些逻辑或者查询不一一列出
INSERT INTO T3(
T3_C1,
T3_C2
)
VALUES(
C_C1,
C_C2
);
FETCH CURSORDATA INTO C_C1,C_C2;
UNTIL DONE
END REPEAT;
CLOSE CURSORDATA; #关闭游标
END;
上面的存储过程看似没有问题,但是要注意SQLSTATE '02000'这个条件!!!
如果在上面的注意点处,没有查到数据,这时候就会触发SQLSTATE '02000',造成DONE设置为1,这样就造成了存储过程在使用游标的时候遍历的一次或者不完整遍历的问题!!!
相信很多新手在写的时候都会遇到这个坑。所以需要注意SQLSTATE '02000'或者NOT FOUND不是作用在游标上的,而是作用与整个存储过程,千万注意!!!
完整的存储过程如下:
CREATE PROCEDURE PR_IMA_XHW_GENERATEOUTPUTTAX()
BEGIN
DECLARE C_C1 VARCHAR(32);
DECLARE C_C2 VARCHAR(32);
DECLARE DONE BOOLEAN DEFAULT 0; #定义结束标识
#定义游标
DECLARE CURSORDATA CURSOR FOR SELECT C1,C2 FROM T1;
#定义游标的结束--当遍历完成时,将DONE设置为1
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET DONE = 1;
OPEN CURSORDATA; #打开游标
FETCH CURSORDATA INTO C_C1,C_C2;
REPEAT
SELECT COLUMNS FROM T2; #注意点!!!
#还有一些逻辑或者查询不一一列出
INSERT INTO T3(
T3_C1,
T3_C2
)
VALUES(
C_C1,
C_C2
);
FETCH CURSORDATA INTO C_C1,C_C2;
UNTIL DONE
END REPEAT;
CLOSE CURSORDATA; #关闭游标
END;
上面的存储过程看似没有问题,但是要注意SQLSTATE '02000'这个条件!!!
如果在上面的注意点处,没有查到数据,这时候就会触发SQLSTATE '02000',造成DONE设置为1,这样就造成了存储过程在使用游标的时候遍历的一次或者不完整遍历的问题!!!
相信很多新手在写的时候都会遇到这个坑。所以需要注意SQLSTATE '02000'或者NOT FOUND不是作用在游标上的,而是作用与整个存储过程,千万注意!!!
相关文章推荐
- [MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- MySQL 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- [MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- 关于一次MySQL主从不同步问题
- MySQL 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- MySQL 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- 关于MySQL中的游标问题
- 关于连续的几个数中有一个数缺失并一次遍历找出的问题
- [MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- 转发:[MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- MySQL 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- [MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- [MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- [MySQL] 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- 关于mysql写触发器中运用游标的问题。
- MySQL 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- MySQL 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- 关于Mysql 外键使用的问题 推荐
- 关于MySql 4.0.12左联接left outer join的一些问题
- 关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法