SQL的存储过程中DECLARE 的用法DEMO如何理解

DELIMITER //
DROP PROCEDURE IF EXISTS curdemo//
CREATE PROCEDURE curdemo()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE cnt INT DEFAULT 0;
DECLARE s_region CHAR(255);
DECLARE stmp CHAR(255)DEFAULT'';
DECLARE cur_region CURSOR FOR SELECT DISTINCT c_region FROM ssbm.customer ORDER BY c_region LIMIT 1000;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done=1;
DROP TABLE IF EXISTS products;
CREATE TABLE products(region CHAR(255),count INT);
OPEN cur_region;
REPEAT
FETCH cur_region INTO s_region;
IF NOT done THEN #这句话怎么理解呢?
IF stmp='' THEN
SET stmp=s_region;
SET cnt=1;
END IF;
IF stmp!=s_region THEN
INSERT INTO products(region ,count)VALUES(stmp,cnt);
SET cnt=1;
SET stmp=s_region;
END IF;
SET cnt=cnt+1;
END IF;
UNTIL done END REPEAT;
CLOSE cur_region;
INSERT INTO products(region,count)VALUES(stmp,cnt);
END//

DELIMITER ;
CALL curdemo;
SELECT region,count FROM products;
请解答下执行步骤是什么!谢谢

2个回答

begin
定义变量
定义游标,游标的结果集为select结果
遇到异常02000时,设置done=1

如果表products存在,则删除
创建products表

循环结果集
开启游标
判断上条数据的region是否跟当条数据的region相等
    不相等则往products中插入一条数据
循环结束以后将最后一条数据也插入到products中

end
调用该存储过程
查询products表数据

这个存储过程中要实现的功能是用游标来实现。理解了游标的用法,你就明白了,很简单的。
参考自:
MySQL游标循环遍历的使用 http://www.data.5helpyou.com/article285.html

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐