【DB2】SQL0501N FETCH 语句或 CLOSE 语句中指定的游标尚未打开,或者游标标量函数引用中的游标变量尚未打开。 SQLSTATE=24501

在DB2中建立存储过程时使用了隐式游标,在调用的时候报错如下:

 SQL0501N  FETCH 语句或 CLOSE 语句中指定的游标尚未打开,或者游标标量函数引用中的游标变量尚未打开。  SQLSTATE=24501
相关环境

------表
CREATE TABLE GH(ID VARCHAR(100));

----存储过程
CREATE PROCEDURE UP_GET_ALL
BEGIN
  FOR V1 AS cursor1 CURSOR for  SELECT DISTINCT ID FROM t_m
 DO 
 INSERT INTO GH VALUES(V1.ID);
  COMMIT;
 END FOR ;    
end;

在执行过程中,存储过程编译没问题,但是调用后出现问题了。

解决办法

将存储过程中的COMMIT放到END FOR后边即可。

问题分析:在嵌套的存储过程中也没有COMMIT操作(任何一个commit操作会导致所有的游标被关闭)

原文地址:https://www.cnblogs.com/OliverQin/p/6632840.html