(使用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
答案 0 :(得分:2)
DB2没有对每个表进行提交。当您调用这样的提交时,您将提交自上次提交以来的所有工作。
因此,如果你去了一次提交,每25次迭代,或者每50次删除,那就可以了。
请注意,如果您的程序在删除第36行时突然显示,那么您需要考虑在重新启动时返回并清理这些行。