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

How can I use COMMIT in stored procedure in 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 The cursor specified in a FETCH statement or CLOSE statement is not open or a cursor variable in a cursor scalar function reference is not open.

如何为每个插入进行提交?

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.