Как я могу использовать COMMIT в хранимой процедуре в DB2 LUW - PullRequest
0 голосов
/ 07 декабря 2018
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, не являетсяopen или переменная курсора в ссылке на скалярную функцию курсора не открыта.

Как сделать коммит для каждой вставки?

1 Ответ

0 голосов
/ 07 декабря 2018

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;

Справочная документация.

...