使用单个聚合提交替换2个提交到2个表的循环?

时间:2018-02-12 18:51:39

标签: sql db2 cobol

(使用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

如果只是一个提交/表,我认为这样可行:

       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

1 个答案:

答案 0 :(得分:2)

DB2没有对每个表进行提交。当您调用这样的提交时,您将提交自上次提交以来的所有工作。

因此,如果你去了一次提交,每25次迭代,或者每50次删除,那就可以了。

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