用一次聚合提交将一个循环替换为 2 个提交到 2 个表?

Replacing a loop with 2 commits to 2 tables with a single aggregate commit?

(使用 DB2) 我有一些代码每行执行 2 次提交(到 2 个表),我想更改为每 25 行一次或类似的代码。 这是基本代码:

    (Code that finds MG-LOCATOR-NBR and MG-PG-NBR here)
    MOVE MG-LOCATOR-NBR  TO MT-LOCATOR-NBR
    MOVE MG-PG-NBR       TO MT-PG-NBR        
    SET IOC1-DELETE-MG TO TRUE
       PERFORM IOC1-IO
       EXEC SQL
            COMMIT
       END-EXEC
       SET IOC1-DELETE-MT TO TRUE
       PERFORM IOC1-IO
       EXEC SQL
            COMMIT
       END-EXEC

如果只针对一个 commit/table,我认为这可行:

       ADD 1 TO WS-REC-COUNT
       IF WS-REC-COUNT = 25
           MOVE ZERO TO WS-REC-COUNT
           EXEC SQL COMMIT END-EXEC
       END-IF

       (And a final COMMIT in the End-of-Job Method to cover the ending)

但我对如何同时调用 2 个不同的表感到困惑。有什么建议么?

编辑:删除的 SQL 非常简单:

        ;IOC1-DEL-MG  SECTION .
        EXEC SQL DELETE FROM VMG
           WHERE LOCATOR_NBR     = :MG-LOCATOR-NB
               AND PG_NBR        = :MG-PG-NBR
        END-EXEC
                    IF SQLCODE = 0
           SET ;IOC1-OK           TO TRUE
        ELSE IF SQLCODE = +100
           SET ;IOC1-NO-DATA      TO TRUE
        END-IF
        DISPLAY 'DELETE MG' SQLCODE

        ;IOC1-DEL-MT  SECTION .
        EXEC SQL DELETE FROM VMT
           WHERE LOCATOR_NBR     = :MT-LOCATOR-NB
               AND PG_NBR        = :MT-PG-NBR
        END-EXEC
                    IF SQLCODE = 0
           SET ;IOC1-OK           TO TRUE
        ELSE IF SQLCODE = +100
           SET ;IOC1-NO-DATA      TO TRUE
        END-IF
        DISPLAY 'DELETE MT' SQLCODE

DB2 没有根据 table 进行提交。当你这样调用提交时,你提交了自上次提交以来的所有工作。

因此,如果您每 25 次迭代或每 50 次删除后进行一次提交,那将有效。

请注意,如果您的程序在删除第 36 行时异常结束,那么您需要考虑在重新启动时返回并清理这些行。