Ragazzi ho un problema con mysql e le transazioni.
Dovrei scrivere una funzione che fa delle INSERT ma le committa solo al termine della funzione quando sono sicuro che tutte siano andate a buon fine. Pensavo di usare le transaction e per questo ho creato delle tabelle con INNODB come engine.

Per fare qualche prova ho scritto una funzione molto semplice, questa:
codice:
CREATE FUNCTION addProdotto (
	MacroArea INT, 
	Cat INT, 
	nCat VARCHAR(200)
	) RETURNS INT 
BEGIN
	DECLARE lCat INT;
	DECLARE lSub INT;
	
	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;
	
	RETURN lCat;
END //
Ho provato ad inserire al suo interno sia SET AUTOCOMMIT = 0, che START TRANSACTION ed ovviamente una COMMIT oppure una ROLLBACK a seconda del risultato della INSERT (il di controllo dello stato l'ho omesso ma comunque va a controllore eventuali eccezioni sollevate dalla INSERT). Ma se inserisco questi elementi mi dice che nelle funzioni non è permesso usare COMMIT inplicite ed esplicite, errore 1455 e 1422 con START TRANSACTION!

Allora mi sono detto: faccio START TRANSACTION prima di chiamare la funzione, quindi fuori di essa, la richiamo, e poi faccio COMMIT o RALLBACK ma niente la INSERT viene eseguita e committata immediatamente! Stessa cosa se setto AUTOCOMMIT a 0 prima della chiamata e poi faccio la COMMIT! Ma niente vengono ingnorati!
(Per testare ho fatto START TRANSACTION; SELECT addProdotto(...); ROLLBACK; ma niente da fare dopo mi ritrovo la riga inserita nella tabella categoria, cosa che non dovrebbe essere vista la ROLLBACK

Come devo fare, sul sito ufficiale di MySQL dalle reference non si capisce niente! Penso non sia nemmeno troppo complicata come cosa ma non so proprio che "pesci" pigliare!
Qualche suggerimento ed esempio sulle TRANSACTION nelle funzioni?

Saluti, Carlo.