#创建光标
DECLARE $done INT DEFAULT 0;
DECLARE PMC_CH CURSOR FOR
SELECT A.FBillNo,B.FMethodID,B.FID
FROM WincoBosCombinedPmc A INNER JOIN WincoBosCombinedPmcEntry B
ON(A.FBillNO=B.FWorkNo)
WHERE(B.FOrder=$M_FOrder)AND(B.FMethodID!=2) 
ORDER BY B.FEntryID;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET $done=1;SET $maxCount=0;
SET $j=0;
SELECT COUNT(FWorkNo) INTO $maxCount FROM WincoBosCombinedPmcEntry
WHERE(FOrder=$M_FOrder)AND(FMethodID!=2)
GROUP BY FID;

OPEN PMC_CH;
REPEAT
  FETCH PMC_CH INTO $T_FWorkNo,$T_FMethodID,$T_FID;
  IF NOT $done THEN
    IF($T_FMethodID=3)OR($T_FMethodID=4)THEN
      UPDATE WincoBosCombinedPmcEntry
      SET FEntryID=$maxCount+1
      WHERE(FWorkNo=$T_FWorkNo)AND(FID=$T_FID);
      SET $maxCount=$maxCount+1;
    ELSE
      UPDATE WincoBosCombinedPmcEntry
      SET FEntryID=$j+1
      WHERE(FWorkNo=$T_FWorkNo)AND(FID=$T_FID);
      SET $j=$j+1;
    END IF;
  END IF;
UNTIL $done END REPEAT;
CLOSE PMC_CH;
错误提示为“Result consisted of more than one row”,将红色标记的代码去掉则无问题,大家看看是怎么回事?

解决方案 »

  1.   

    SELECT COUNT(FWorkNo) INTO $maxCount FROM WincoBosCombinedPmcEntry 
    WHERE(FOrder=$M_FOrder)AND(FMethodID!=2) 
    GROUP BY FID;返回的记录多于1条,检查一下
      

  2.   

    SELECT COUNT(FWorkNo) INTO $maxCount FROM WincoBosCombinedPmcEntry 
    WHERE(FOrder=$M_FOrder)AND(FMethodID!=2) 
    GROUP BY FID;改成,把GROUP BY FID去掉SELECT COUNT(FWorkNo) INTO $maxCount FROM WincoBosCombinedPmcEntry 
    WHERE(FOrder=$M_FOrder)AND(FMethodID!=2) ;
      

  3.   

    或者改为select max(mcnt) into $maxCount FROM
    (
    SELECT COUNT(FWorkNo) as mcnt FROM WincoBosCombinedPmcEntry 
    WHERE(FOrder=$M_FOrder)AND(FMethodID!=2) 
    GROUP BY FID
    ) t;