MySQL 存储过程,游标未打开 (1326)

标签 mysql sql stored-procedures

所以,我试图获取有关 SELECT 请求的一些结果,但每次我尝试调用它给我的过程时:

mysql> call canIDoThisSequenceSire(38,18);
ERROR 1326 (24000): Cursor is not open

我不知道为什么,我认为我的光标打开正确(我在其他存储过程中使用过这种代码骨架(从这里获取)并且工作正常)并且在尝试找到有类似错误的人之后,我只找到了没有使用 OPEN curl 线的人。

这是代码

PROCEDURE `canIDoThisSequenceSire`(in idOpe INT, in idSeq INT)
BEGIN

DECLARE done INT default FALSE;
DECLARE isRoot,seqParent, seqDone INT;


DECLARE curl CURSOR FOR SELECT 
    se.isRoot, se.id_sequenceEnchainement
    FROM 
        tachesrealisees as tr
    JOIN
        collectiontache as ct
    ON
        ct.id = tr.id_collectiontache
    JOIN
        tache as t
    ON
        t.id=ct.id_tache
    JOIN 
        sequences as s
    ON 
        s.id = ct.id_sequences
    JOIN
        sequenceenchainement as se
    ON
        se.id_sequence=s.id
    WHERE 
        tr.id_operationsrealisees=idOpe
    AND 
        s.id=idSeq;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN curl;


laBoucle : LOOP
    FETCH curl INTO isRoot, seqParent;
    IF isRoot THEN
        SET done = TRUE;
        LEAVE laBoucle;
    END IF;

    IF ISNULL(isRoot) then
        LEAVE laBoucle;
    END IF;

    CLOSE curl;

    END LOOP laBoucle;

    IF done THEN -- La séquence est à la racine
        SELECT 1 as result; 
    END IF;

    IF NOT done THEN 
            SELECT 0 as result; -- Please, come again
    END IF;

END

谢谢!

最佳答案

您正在关闭循环内的光标。

...
    IF ISNULL(isRoot) THEN
        LEAVE laBoucle;
    END IF;
    -- CLOSE curl;
END LOOP laBoucle;
CLOSE curl;
...

关于MySQL 存储过程,游标未打开 (1326),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25739429/

相关文章:

javascript - SQL/PHP 静默刷新

mysql - 合并两列,多行忽略重复 - MySQL

mysql - 计算后将数据从一个表插入到另一个表的过程

mysql - 如何修改 MySQL 表中列的大小?

mysql - 根据两个表选择记录

sql - 创建一个为连接 session 的长度声明的变量?

c# - 如何将 asp.net 下拉选择项作为输入传递给 c# 中的存储过程?

mysql - 在SQL中显示两个表的列不为空

php - 在 MYSQL 表中使用 Hash 和 Salt

java - 无法从 hibernate 调用存储过程