我有以下代码并尝试进行错误处理。但是有些不对劲。
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中启动的所有内容。
感谢您的帮助