Credo che purtroppo le transazioni in trigger o stored procedure non siano supportare. Perchè non usare una stored procedure allora?
Potresti fare una cosa del genere (spero non aver sbagliato niente):
codice:
CREATE PROCEDURE addProdotto(
IN MacroArea INT,
IN Cat INT,
IN nCat VARCHAR(200)
OUT id INT
)
BEGIN
DECLARE lCat INT;
DECLARE lSub INT;
DECLARE EXIT HANDLER FOR NOT FOUND
BEGIN
ROLLBACK;
CALL ERROR_IS_HAPPENED();
END;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
CALL ERROR_IS_HAPPENED();
END;
DECLARE EXIT HANDLER FOR SQLWARNING
BEGIN
ROLLBACK;
CALL ERROR_IS_HAPPENED();
END;
START TRANSACTION;
SET lCat = -1;
SET lSub = -1;
IF (Cat = -1) THEN
INSERT INTO categoria (descr, idma) VALUES (nCat, 2);
SET lcat = LAST_INSERT_ID();
END IF;
SET id = lcat;
COMMIT;
END
e per chiamarla
codice:
CALL addProdotto(....,@id);
SELECT @id;
Purtroppo usando stored procedure /functions iniziano a vedersi limiti un pochino fastidiosi di mysql. Ad esempio manca una funzione che fa da raise dell'errore e si è costretti ad usare un workaround che consiste nel chiamare una funzione non definita.