Sql 如何在DB2LUW中的存储过程中使用COMMIT
当我执行此存储过程时,会出现以下错误: db2“call foo()”Sql 如何在DB2LUW中的存储过程中使用COMMIT,sql,stored-procedures,db2,db2-luw,Sql,Stored Procedures,Db2,Db2 Luw,当我执行此存储过程时,会出现以下错误: db2“call foo()” SQL0501N FETCH语句或CLOSE语句中指定的游标不可用 打开或游标标量函数引用中的游标变量未打开 如何为每个插入执行提交?commit关闭所有未使用HOLD选项声明的打开游标,包括由for语句隐式创建的游标 以下是您需要进行的更改: CREATE TABLE T1(c1 varchar(10)); CREATE OR REPLACE PROCEDURE FOO() BEGIN FOR C AS WITH TT
SQL0501N FETCH语句或CLOSE语句中指定的游标不可用 打开或游标标量函数引用中的游标变量未打开
如何为每个插入执行提交?
commit
关闭所有未使用HOLD
选项声明的打开游标,包括由for
语句隐式创建的游标
以下是您需要进行的更改:
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
@
旁注:在过程中使用
COMMIT
/ROLLBACK
时需要小心,因为这会使合成变得困难-如果另一个过程调用此过程,您可能会提交/回滚您不知道的更改。如果您必须在这里提交,那么最好使用一个。否则,让调用方处理范围。此外,该语句可以不使用循环编写,但不清楚您的真实语句是否可以。
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;