【发布时间】:2019-05-09 06:00:27
【问题描述】:
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“调用 foo()”
SQL0501N 在 FETCH 语句或 CLOSE 语句中指定的游标不是 打开或游标标量函数引用中的游标变量未打开。
如何为每个插入提交?
【问题讨论】:
-
旁注:你需要小心在一个过程中使用
COMMIT/ROLLBACK,因为它会使组合变得困难——如果另一个过程调用这个,你最终可能会提交/滚动返回您不知道的更改。如果您在此处必须COMMIT,最好使用autonomous transaction。否则,让调用者处理范围。此外,可以在不使用循环的情况下编写该语句,但尚不清楚您的真实语句是否可以。
标签: sql stored-procedures db2 db2-luw