如何在DB2 LUW的存储过程中使用COMMIT

时间:2018-12-07 12:57:23

标签: sql stored-procedures db2 db2-luw

CREATE TABLE T1(c1 varchar(10));

CREATE OR REPLACE PROCEDURE FOO()
BEGIN
FOR C AS WITH TT (C1) AS (VALUES (1) , (2) , (3)) SELECT C1 FROM TT
DO
INSERT INTO T1 VALUES ('aaa');
COMMIT;
END FOR;
END
@

执行此存储过程时,出现此错误:

  

db2“ call foo()”
  SQL0501N在FETCH语句或CLOSE语句中指定的游标不是   打开或游标标量函数引用中的游标变量未打开。

如何为每个插入内容提交内容?

1 个答案:

答案 0 :(得分:1)

COMMIT关闭所有未使用HOLD选项声明的打开的游标,包括FOR语句隐式创建的游标。

这是您需要进行的更改:

FOR C AS cur1 CURSOR WITH HOLD FOR
WITH TT (C1) AS (VALUES (1) , (2) , (3)) SELECT C1 FROM TT
DO
  INSERT INTO T1 VALUES ('aaa');
  COMMIT;
END FOR;

Documentation reference.