Openedge事务错误处理记录不会在子事务中回滚

时间:2014-06-08 06:29:02

标签: error-handling transactions openedge

我有以下代码并尝试进行错误处理。但是有些不对劲。

    Routine–level throw error.

    PROCEDURE Create-Subrecords :
    For each db-table1 no-lock :
LABEL1:
   For each db-table2 no-lock 
      on error undo, next LABEL1 :
              For each db-table3 no-lock 
        on error undo, throw:
        Create db-table4.
        …..

       End. /*  db-table3 */
       Run proc1.  (Do some database updates on db-table2)

               Catch e as progress.lang.apperror:
             Msg = e:Getmessage(1).  /* save message for later */
             Undo,  next LABEL1.
               End catch.

     End. /*  db-table2 */
    End. /*  db-table1 */
    End PROCEDURE.

问题是Proc1返回了catch语句捕获的错误。 在那里,我想撤消在每个db-table2启动的事务中完成的所有工作。

所以我认为所有db-table4记录(在每个db-table3启动的子事务中创建) 必须删除。 =>但事实并非如此,如果我在程序完成后查看数据库,那么所有新的db-table4记录都在那里。

我做错了什么?因为我想回滚(出错时)在LABEL1中启动的所有内容。

感谢您的帮助

0 个答案:

没有答案