Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在DB2LUW中的存储过程中使用COMMIT_Sql_Stored Procedures_Db2_Db2 Luw - Fatal编程技术网

Sql 如何在DB2LUW中的存储过程中使用COMMIT

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

当我执行此存储过程时,会出现以下错误:

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 (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;