CREATE OR REPLACE PROCEDURE <PROC_NAME>
BEGIN
CALL PROC1;
CALL PROC2;
CALL PROC3;
END;
在以上所有3个电话中,我添加了DECLARE EXIT HANDLER FOR SQLEXCEPTION CALL PROC_ERROR('Proc_Name');
现在让我们说PROC2中有一个sqlexception,控件转到PROC_ERROR,我执行ROLLBACK语句。 在调用PROC_ERROR执行之后,控件仍然继续并执行不应发生的PROC3过程。 理想情况下,我想在ROLLBACK完成后立即结束执行。
答案 0 :(得分:1)
在异常处理程序中,在ROLLBACK语句之后,您需要引发另一个异常。您可以使用RESIGNAL语句来实现此目的。详细信息请参见:http://guyharrison.squarespace.com/blog/2009/7/13/signal-and-resignal-in-mysql-54-and-60.html由于不会处理RESIGNALed异常,因此只要ROLLBACK完成,执行就会结束。