Mysql 光标中的Distinct不起作用。。。?
提示,有些东西我不明白,明显在光标上不起作用还是什么? 有一个光标,有一个明显的,我在一个循环中得到。。如果来自游标的请求单独执行,则返回1条记录,如果是distinct clean,则将有2个条目。一个循环在光标上运行两次,每次运行两次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 =
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;
此代码段可能有助于: