MySQL游标两次获取相同的结果

标签 mysql loops cursor

我有一个存储过程,它检查一个表中的行以将其详细信息插入到另一个表中。我正在使用游标,但我遇到了一个大问题:游标在同一行上循环了 2 次。所以我得到 2 repeated inserts 。 这是sp代码:

    IF (SELECT 1 FROM NOVEDADES  WHERE LEGAJO_ID = pLEGAJO_ID AND FECHA >= pFECHA AND CONCEPTO_ID != 11 AND CONCEPTO_ID != 13 AND CONCEPTO_ID != 12 LIMIT 1) = 1
    THEN
        BEGIN
        DECLARE vCONCEPTO_ID INT;
        DECLARE vMONTO DECIMAL(12,2);
        DECLARE vID INT;
        DECLARE vDONE INT DEFAULT 0;

        DECLARE CURSOR_NOVEDADES CURSOR FOR     

        SELECT ID
        FROM NOVEDADES 
        WHERE LEGAJO_ID = pLEGAJO_ID
        AND FECHA >= pFECHA
        AND CONCEPTO_ID != 11 
        AND CONCEPTO_ID != 13 
        AND CONCEPTO_ID != 12;

        DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDONE=1;

        OPEN CURSOR_NOVEDADES;

        SET vDONE = 0;

        REPEAT

            FETCH CURSOR_NOVEDADES INTO vID;

            SELECT CONCEPTO_ID, MONTO INTO vCONCEPTO_ID, vMONTO
            FROM NOVEDADES WHERE ID = vID;

            INSERT INTO LIQUIDACIONES_DETALLE (LIQUIDACION_ID, CONCEPTO_ID, MONTO)
            VALUES(pLIQUIDACION_ID, vCONCEPTO_ID, vMONTO);

        UNTIL vDONE END REPEAT;
        CLOSE CURSOR_NOVEDADES;
        END;
    END IF;

以“p”开头的变量为IN参数,以“v”开头的为普通变量。 我必须说游标的查询只返回 1 个值。 我也尝试过使用 LOOP,但结果相同。 我已经尝试“调试”插入一些 SELECTS 的过程,但我看到了重复的内容。

非常感谢。

最佳答案

在循环的最后一次迭代中,fetch 失败。当它这样做时,您将重新插入以前的值。这是解决此问题的一种方法:

    REPEAT

        FETCH CURSOR_NOVEDADES INTO vID;

        if ! vdone then

            SELECT CONCEPTO_ID, MONTO INTO vCONCEPTO_ID, vMONTO
            FROM NOVEDADES WHERE ID = vID;

            INSERT INTO LIQUIDACIONES_DETALLE (LIQUIDACION_ID, CONCEPTO_ID, MONTO)
            VALUES(pLIQUIDACION_ID, vCONCEPTO_ID, vMONTO);
       end

    UNTIL vDONE END REPEAT;

关于MySQL游标两次获取相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16900482/

相关文章:

sql - 根据交易数据计算当前成员(member)余额

javascript - jQuery - 替换所有选项名称中的空格

android - 带光标的 ListActivity

MySQL 选择特定值的最新行

php - 如何查询 SELECT name FROM movie WHERE Category LIKE :search - with adding some string before and after SEARCH

Java数表奇怪的错误

java - OnListItemClick 从未被调用?

css - 光标仅在 IE7 中显示为 anchor 标记边缘区域的指针

java - 即使行存在,executeQuery Mysql - Java 中的 ResultSet 也为 false

javascript - 迭代每个测验 Jquery