Db2 SQLCODE=-501,SQLSTATE=24501,带游标

Db2 SQLCODE=-501,SQLSTATE=24501,带游标,db2,Db2,我写了一个程序。我得到下面的错误。 有人能帮我吗 Create procedure p1() declare cur1 cursor WITH HOLD for STMT1; DECLARE CONTINUE HANDLER FOR SQLSTATE '24501' BEGIN OPEN index_list ; set exitcode = 1; END ; set TEXT =(); PREPARE STMT1 FROM TEXT; OPEN cur1 ; FE

我写了一个程序。我得到下面的错误。 有人能帮我吗

Create procedure p1()

declare cur1 cursor WITH HOLD for STMT1;

DECLARE CONTINUE HANDLER FOR SQLSTATE '24501' 
BEGIN
OPEN index_list ;
set exitcode = 1;

END ;  

set TEXT =();
PREPARE STMT1 FROM TEXT;     

OPEN cur1 ;

 FETCH FROM cur1 INTO VAR2,
                            VAR1 ;

 WHILE (SQLCODE = 0)
       DO
        EXECUTE IMMEDIATE 'SET PASSTHRU SAMPLE' ;
        ----
        -----
        EXECUTE IMMEDIATE 'SET PASSTHRU RESET' ;       

FETCH FROM cur1 INTO VAR2,
                            VAR1 ; 

END WHILE;
这是我的代码大纲。我的问题是在“SET PASSTHRU RESET”之后,游标被关闭&第二次获取失败,出现以下错误。甚至我指定了curos a with HOLD选项

错误: FETCH语句或CLOSE语句中指定的游标未打开,或者游标标量函数引用中的游标变量未打开。。SQLCODE=-501,SQLSTATE=24501,DRIVER=4.17.30 例行程序的运行失败

有人能告诉我我要补充什么吗。
我是db2的新手&从未遇到过这种情况。这就是我问专家的原因

这里有很多问题1)如果您准备的是最终在游标中使用的语句,则在
声明游标之前调用
PREPARE
(不过您可以声明游标)。2) 您将光标声明为
cur1
,但从
index\u list
获取,因此您收到的消息并不令人惊讶。3) 该声明可能仍然会成功。。。。。。。4) 光标的使用意味着您将对此进行RBAR(一行接一行)。你真的想分块完成,或者一批完成。假设DB2有一些实用程序可以在不同的服务器中查询表,甚至可以在不同的RDBMS中查询表,但我从来没有设置它们,因为这不是我的原始代码。但我找到了解决方案,我将其作为异常处理&我在该异常中声明了exit code=1&它现在正在工作。我可以运行我的记录。谢谢你的支持。添加到问题中