有人可以告诉我是否可以从一个过程中调用另一个过程,并且如果任一过程的任何部分失败,则将所有内容回滚?
如果这是可能的,有人可以给我看一个如何实现的小例子吗?
编辑:过程“b”失败,但过程“a”仍然在表“a”中插入一行。我的理解是,如果插入的任何部分失败,那么所有内容(两个插入)都会回滚,这不会在此处发生。问题是为什么不呢?
程序“一”
BEGIN
DECLARE b INT DEFAULT 0;
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
START TRANSACTION;
INSERT INTO a(a)
VALUES(iA);
CALL b(iB,LAST_INSERT_ID(),@b);
SELECT @b INTO b;
IF b !=1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END
程序“b”
BEGIN
DECLARE b INT DEFAULT 0;
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
START TRANSACTION;
INSERT INTO b VALUES(iB,id);
SET b=1;
COMMIT;
END;