带有游标的DB2 LOOP语句提前终止

时间:2013-02-24 19:02:28

标签: loops db2

我在DB2(iSeries V5R3M0)中有一个存储过程,它打开一个游标并输入一个循环语句。循环从输入(工作队列)表中获取下一行,处理记录,然后从输入表中删除该行。这个过程很好,除了在循环终止之前处理随机数量的行 - 通常是1行,有时是2行,偶尔是3行。

有没有人有任何想法为什么它提前结束?我在逻辑中看不到任何错误,所以我假设它可能与删除输入行有关,但在这种情况下为什么它有时会处理2行或3行?

以下是该程序的精简版: -

CREATE PROCEDURE DOTRANSFER (
 OUT PROCESSED INTEGER)
LANGUAGE SQL
BEGIN
DECLARE V_PTNO INTEGER ;
*** lot more declares
--
DECLARE AT_END SMALLINT DEFAULT 0 ;
DECLARE NOT_FOUND CONDITION FOR SQLSTATE '02000' ;
DECLARE CURREQUESTS ASENSITIVE NO SCROLL CURSOR WITH HOLD WITHOUT RETURN FOR
    SELECT *
    FROM PENDTRPF
    ORDER BY PTNO ;
DECLARE CONTINUE HANDLER FOR NOT_FOUND
    SET AT_END = 1 ;
--
-- Initialise
--
SET PROCESSED = 0 ;
OPEN CURREQUESTS ;
FETCH_LOOP : LOOP
    --
    -- Fetch the next transfer request
    --
    FETCH CURREQUESTS INTO
        V_PTNO , ...;
    IF AT_END <> 0 THEN
        LEAVE FETCH_LOOP ;
    END IF ;
*** Initialisation code
    --
    -- Start the update
    --
    COMMIT ;
*** Update or insert target table records
    --
    -- Done
    --
    DELETE FROM PENDTRPF WHERE PTNO = V_PTNO ;
    SET PROCESSED = PROCESSED + 1 ;
    COMMIT ;
END LOOP ;
END@

0 个答案:

没有答案