普通网友 2016-08-17 06:59 采纳率: 60%
浏览 5433
已采纳

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条回答 默认 最新

  • blue小脚丫 2016-08-17 08:16
    关注

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题