Mysql 光标中的Distinct不起作用。。。?

Mysql 光标中的Distinct不起作用。。。?,mysql,Mysql,提示,有些东西我不明白,明显在光标上不起作用还是什么? 有一个光标,有一个明显的,我在一个循环中得到。。如果来自游标的请求单独执行,则返回1条记录,如果是distinct clean,则将有2个条目。一个循环在光标上运行两次,每次运行两次 DECLARE cur CURSOR FOR SELECT DISTINCT t.DATPR, A.ACCOUNT_NO FROM postgkh.tt_krd t INNER JOIN postgkh.account A ON t.LS =

提示,有些东西我不明白,明显在光标上不起作用还是什么? 有一个光标,有一个明显的,我在一个循环中得到。。如果来自游标的请求单独执行,则返回1条记录,如果是distinct clean,则将有2个条目。一个循环在光标上运行两次,每次运行两次

DECLARE cur CURSOR FOR
   SELECT DISTINCT t.DATPR, A.ACCOUNT_NO
   FROM postgkh.tt_krd t
   INNER JOIN postgkh.account A ON t.LS = A.ACCOUNT_NO
   INNER JOIN postgkh.resid RID USING(ACCOUNT_ID)
   INNER JOIN postgkh.reseller R USING(RESELLER_ID)
   WHERE r.RESELLER_ID = RID
   ORDER BY A.ACCOUNT_ID;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
  OPEN cur;
  REPEAT
 FETCH cur INTO PR_DATE,ACCID, ACCNO;
 SET LIM_FP = postgkh.GET_ACCOUNT_FP(ACCID) - INTERVAL 1 DAY;
 IF(LIM_FP>PR_DATE) THEN
  IF(TMP IS NULL OR TMP<>ACCNO) THEN
   SET TMP = ACCNO;
   SET ERR = CONCAT(ERR,', ',ACCNO);
  END IF;
 END IF;
  UNTIL done END REPEAT;
  CLOSE cur;
DECLARE cur CURSOR FOR
选择不同的t.DATPR,A.ACCOUNT\u NO
从postgkh.tt_krd t
t.LS上的内部连接postgkh.account A=A.account\u NO
内部连接postgkh.resid RID使用(帐户ID)
内部连接postgkh.reseller使用(reseller\u ID)
其中r.RESELLER\u ID=RID
按A.帐户\ u ID订购;
为SQLSTATE“02000”声明CONTINUE处理程序集done=1;
开放cur;
重复
将cur提取到PR_DATE、ACCID、ACCNO中;
设置LIM\u FP=postgkh.GET\u ACCOUNT\u FP(ACCID)-间隔1天;
如果(LIM_FP>PR_DATE),则
如果(TMP为NULL或TMPACCNO),则
设置TMP=ACCNO;
设置ERR=CONCAT(ERR,,,ACCNO);
如果结束;
如果结束;
直到完成为止重复;
封闭电流;

代码中的光标结构格式不正确。光标将读取的最后一行将被读取两次。光标到达最后一行后应关闭

这里发生的是光标遍历到达最后一行,然后触发SQLSTATE的错误处理程序,然后done=1。当时它还没有关闭。光标保持打开状态,以再次遍历同一最后一行,直到到达“直到完成”结束重复

我建议不要对游标使用REPEAT-UNTIL构造。改为使用循环:

OPEN cur;
curLoop: LOOP
FETCH cur INTO PR_DATE,ACCID, ACCNO;
 IF (done)
 THEN
  CLOSE cur;
  LEAVE curLoop;
 END IF;

 ...

END LOOP curLoop;
此代码段可能有助于: