有人能告诉我是否可以在一个过程中调用另一个过程,并且如果任何一个过程的任何部分失败,都会回滚所有内容吗?
如果可能的话,能否举个小例子来说明如何实现?
编辑:过程“b”失败了,但是过程“a”仍向表“a”插入了一行。 据我所知,如果插入的任何部分失败,则会回滚所有内容(包括两个插入),但这里并没有发生。 问题是为什么?
“过程a”:
如果可能的话,能否举个小例子来说明如何实现?
编辑:过程“b”失败了,但是过程“a”仍向表“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;