解决 mysql 存储过程 repeat 循环多一次

来源:互联网 发布:卖家加入淘宝客要求 编辑:程序博客网 时间:2024/05/16 11:33
BEGIN        -- 声明局部变量        DECLARE done BOOLEAN DEFAULT 0;        DECLARE goods_name varchar(266);        DECLARE cat_name varchar(255);         DECLARE goname CURSOR         For         SELECT b.goodsName as goodsName,c.name as catname FROM es_spider_bigdata b,es_goods_cat  c where c.cat_id=b.catid  GROUP BY goodsName ;        -- 当SQLSTATE为02000时设置done值为1         DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;        -- 创建一个ordertotals的表        -- CREATE TABLE IF NOT EXISTS ordertotals( order_num INT , total DECIMAL(8,2))        start transaction;delete from bigana_result_temp where DATE_SUB(curdate(),INTERVAL 30 day)>date;commit;        Open goname ;        -- 开始循环        REPEAT             FETCH goname INTO goods_name,cat_name;          IF done<>1 THEN                -- 把当前行的值赋给声明的局部变量o中                -- 用上文讲到的ordertotal存储过程并传入参数,返回营业税计算后的合计传给t变量       INSERT INTO bigana_result_temp (catName, price, unit, location, name, date) SELECT DISTINCT  c.name catName,format(avg(goodsprice), 2) price,u.unit unit,e.location location,e.goodsName name,date_format(e.date, '%y-%m-%d') dateFROMes_goods_cat c,es_spider_bigdata e,(SELECTunitFROMes_spider_bigdata t,es_goods_cat cWHEREt.goodsname = goods_nameAND t.catid = c.cat_idAND c. NAME = cat_nameGROUP BYunitORDER BYcount(unit) DESCLIMIT 0,1) uWHEREe.unit = u.unitAND goodsname = goods_nameAND c.cat_id = e.catidAND c. NAME = cat_name-- 正式环境中需要放开-- And e.date=CURDATE(); GROUP BYe.location;    end if;        -- 把订单号和合计插入到新建的ordertotals表中       UNTIL done  END REPEAT;              -- 关闭游标        Close goname ;         END
if 判断和 fetch 游标数据的顺序不能颠倒
 
原创粉丝点击