普通网友 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 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题