关于no data - zero rows fetched,selected,or processed





。。。mysql给我的郁闷,也不是一次二次了,但我还是不习惯,继续吐血。
出现这个问题是在写一个存储过程中,用到游标时出现的,在网上查,说是mysql的一个bug( - -!这


都可以 )
找了一个多小时,最后终于找到解决的方案,就是在定义游标的下面,加上这句
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET P_ID = NULL; 


存储过程如下 
CREATE DEFINER = 'root'@'%'
PROCEDURE etm_one.P_ManagerWorkInfo(IN P_StartDate VARCHAR(255),
                                    IN P_EndDate   VARCHAR(255)
                                    )
BEGIN 
  
  DECLARE P_ID                                         INT;
  DECLARE P_ParamName                                  VARCHAR(50);
  DECLARE P_strSql1, P_strSql2, P_strSql, P_strSql3    TEXT;
  
  DECLARE curs CURSOR FOR
  SELECT id
       , paramname
  FROM
    K_SystemParam
  WHERE
    parentID = 26;


  -- 解决mysql Bug:no data - zero rows fetched,selected,or processed
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET P_ID = NULL; 


  IF (ifnull(P_StartDate, '') = '') THEN
    SET P_StartDate = '1900-01-01';
  END IF;
  IF (ifnull(P_EndDate, '') = '') THEN
    SET P_EndDate = '2100-01-01';
  ELSE
    SET P_EndDate = date_format(date_add(P_EndDate, INTERVAL 1 DAY), '%Y-%m-d');
  END IF;
  SET P_strSql = '';
  SET P_strSql1 = 'select  CreatorGuid,createdate,';
  SET P_strSql2 = 'select  CreatorGuid,createdate,';
  SET P_strSql3 = '';
  OPEN curs;
  FETCH curs INTO P_ID, P_ParamName;
  WHILE (P_ID IS NOT NULL)
  DO
    SET P_strSql1 = concat(P_strSql1, 'ifnull(SUM(', P_ParamName, '),0)', P_ParamName, ',');
    SET P_strSql2 = concat(P_strSql2, 'case when ID=', concat(P_ID, ''), ' then num end ', 


P_ParamName, ',');
    SET P_strSql3 = concat(P_strSql3, ',a.', P_ParamName);
    FETCH curs INTO P_ID, P_ParamName;
     
  END WHILE;
  CLOSE curs;


  /*SELECT P_strSql1;
  SELECT P_strSql2;
--SELECT LEFT(P_strSql3,LEN(P_strSql3)-1)*/
  SET P_strSql = concat(P_strSql1, '1 aa from (', P_strSql2, '1 aa from
(
select mi.CreatorGuid,date_format(mi.CreateTime,"%Y-%m-%d") 


createdate,ks.ID,ks.ParamName,COUNT(*) num from MemberInteraction mi
left join K_SystemParam ks
on ks.id=mi.InteractionType
group by mi.CreatorGuid,ks.ParamName,ks.ID,date_format(mi.CreateTime,"%Y-%m-%d")
) a
)aa
group by CreatorGuid,createdate');


  /*print P_strSql*/
  SET P_strSql = concat('select km.RealName 顾问名称,d.DepartmentName 所属部


门,p.PositionName 职位,a.CreateDate 跟踪时间', P_strSql3, ' from (', P_strSql,
  ')a
left join K_Manager km
on a.CreatorGuid=km.ManagerGUID
left join Department d
on km.DepartmentGuid=d.DepartmentGuid
left join Position p
on km.PositionGuid=p.PositionGuid
',
  ' where a.createdate>="', P_StartDate, '" and a.createdate <"', P_EndDate, '"
order by km.RealName,a.createdate');


  SET @P_strSql = P_strSql;
  PREPARE result FROM @P_strSql;
   EXECUTE result;
  --  SELECT P_strSql;
END



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值