プロシージャ内から別のプロシージャを呼び出すことが可能かどうか、またいずれかのプロシージャの一部が失敗した場合はすべてをロールバックできるかどうか教えてもらえますか?
これが可能であれば、誰かがこれを実装する方法の小さな例を見せてもらえますか?
編集:プロシージャ "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;